ফাইল gitব্যবহারে বাইনারি ফাইলগুলি কীভাবে উপেক্ষা করা যায় .gitignore?
উদাহরণ:
$ g++ hello.c -o hello
"হ্যালো" ফাইলটি একটি বাইনারি ফাইল। gitএই ফাইল উপেক্ষা করতে পারেন?
[^\.]*।
ফাইল gitব্যবহারে বাইনারি ফাইলগুলি কীভাবে উপেক্ষা করা যায় .gitignore?
উদাহরণ:
$ g++ hello.c -o hello
"হ্যালো" ফাইলটি একটি বাইনারি ফাইল। gitএই ফাইল উপেক্ষা করতে পারেন?
[^\.]*।
উত্তর:
# Ignore all
*
# Unignore all with extensions
!*.*
# Unignore all dirs
!*/
### Above combination will ignore all files without extension ###
# Ignore files with extension `.class` & `.sm`
*.class
*.sm
# Ignore `bin` dir
bin/
# or
*/bin/*
# Unignore all `.jar` in `bin` dir
!*/bin/*.jar
# Ignore all `library.jar` in `bin` dir
*/bin/library.jar
# Ignore a file with extension
relative/path/to/dir/filename.extension
# Ignore a file without extension
relative/path/to/dir/anotherfile
!/**/পরিবর্তে ব্যবহার করে !*/; কোনটি সঠিক? / সিসি @ ভনসি
এর মতো কিছু যুক্ত করুন
*.o
.gitignore ফাইলটিতে এটিকে আপনার রেপোর গোড়ায় স্থাপন করুন (অথবা আপনি যে কোনও সাব ডিরেক্টরিতে চান সেটি স্থাপন করতে পারেন - এটি সেই স্তরটি থেকে প্রয়োগ করা হবে) এবং এটি পরীক্ষা করে দেখুন।
সম্পাদনা:
কোনও এক্সটেনশনবিহীন বাইনারিগুলির জন্য, আপনি এগুলি bin/বা অন্য কোনও ফোল্ডারে রাখাই ভাল । সামগ্রিকভাবে বিষয়বস্তুর ধরণের উপর ভিত্তি করে কোনও অগ্রাহ্য নেই।
আপনি চেষ্টা করতে পারেন
*
!*.*
তবে তা বুদ্ধিমানের নয়।
gccপাস করার মাধ্যমে তৈরি করা ফাইলগুলির জন্য আমি এখানে একই জিনিস করার চেষ্টা করছি -o $@।
আপনার কাছে সমস্ত এক্সিকিউটেবলকে যুক্ত করতে .gitignore(যা আপনি সম্ভবত "বাইনারি ফাইল" বলতে চান যা আপনার প্রশ্ন থেকে বিচার করে) আপনি ব্যবহার করতে পারেন
find . -executable -type f >>.gitignore
আপনি যদি নিজের লাইনের ক্রমটি যত্ন নেওয়ার বিষয়ে চিন্তা না করেন তবে আপনি নিম্নলিখিত কমান্ডটি দিয়ে .gitignoreআপডেট করতে পারেন .gitignoreযা ডুপ্লিকেটগুলি সরিয়ে দেয় এবং বর্ণানুক্রমিক ক্রম অক্ষত রাখে।
T=$(mktemp); (cat .gitignore; find . -executable -type f | sed -e 's%^\./%%') | sort | uniq >$T; mv $T .gitignore
দ্রষ্টব্য, আপনি সরাসরি আউটপুটটি পাইপ করতে পারবেন না .gitignoreকারণ catএটি পড়ার জন্য ফাইলটি খোলার আগে এটি কেটে যাবে । এছাড়াও, আপনি \! -regex '.*/.*/.*'উপ-ডিরেক্টরিগুলিতে এক্সিকিউটেবল ফাইলগুলি অন্তর্ভুক্ত করতে চান না কিনা তা সন্ধান করতে আপনি একটি বিকল্প হিসাবে যুক্ত করতে চাইতে পারেন ।
বাইনারিগুলির সাথে আপনার সেরা বাজি হয় হয় তাদের একটি এক্সটেনশন দেওয়া যা আপনি খুব সহজেই একটি স্ট্যান্ডার্ড প্যাটার্ন দিয়ে ফিল্টার করতে পারেন, বা ডিরেক্টরিতে যে ডিরেক্টরি ডিরেক্টরিতে ফিল্টার করতে পারেন সেগুলিতে রেখে দিন।
উইন্ডোজটিতে এক্সটেনশন পরামর্শটি বেশি প্রযোজ্য, কারণ এক্সটেনশনগুলি স্ট্যান্ডার্ড এবং মূলত প্রয়োজনীয় তবে ইউনিক্সে আপনি আপনার এক্সিকিউটেবল বাইনারিগুলিতে এক্সটেনশনগুলি ব্যবহার করতে বা নাও করতে পারেন। এই ক্ষেত্রে, আপনি এগুলি একটি বিন / ফোল্ডারে রাখতে পারেন bin/এবং আপনার .gitignore এ যুক্ত করতে পারেন।
আপনার খুব নির্দিষ্ট, ক্ষুদ্র-স্কোপ উদাহরণে আপনি কেবল helloআপনার .gitignore এ রাখতে পারেন।
আপনি চেষ্টা করতে পারেন আপনার .gitignore:
*
!*.c
এই পদ্ধতির অনেক অসুবিধা রয়েছে, তবে এটি ছোট প্রকল্পগুলির জন্য গ্রহণযোগ্য।
আপনি যদি কোনও মেকফিল ব্যবহার করছেন, আপনি নিজের .gitignore ফাইলটিতে নতুন বাইনারিগুলির নাম যুক্ত করতে আপনার তৈরি বিধিগুলি সংশোধন করার চেষ্টা করতে পারেন।
একটি ছোট হাস্কেল প্রকল্পের জন্য মেকফিলের উদাহরণ এখানে রয়েছে;
all: $(patsubst %.hs, %, $(wildcard *.hs))
%: %.hs
ghc $^
grep -xq "$@" .gitignore || echo $@ >> .gitignore
এই মেকফাইলটি হাস্কেল কোডের বাইরে এক্সিকিউটেবলগুলি তৈরি করার জন্য একটি নিয়মকে সংজ্ঞায়িত করে। Gc কে আহ্বান করার পরে, বাইনারি ইতিমধ্যে এটিতে রয়েছে কিনা তা দেখতে আমরা .gitignore পরীক্ষা করে দেখি। যদি তা না হয় তবে আমরা বাইনারিটির নামটি ফাইলটিতে যুক্ত করি।
বাইনারি ফাইলগুলি প্রায়শই কোনও এক্সটেনশন ছাড়াই থাকে। এটি যদি আপনার ক্ষেত্রে হয় তবে এটি ব্যবহার করে দেখুন:
*
!/**/
!*.*
ফাইলটি ব্যবহার করে এখানে আরও একটি সমাধান দেওয়া হয়েছে। এইভাবে এক্সিকিউটেবল স্ক্রিপ্টগুলি গিটিগনোরে শেষ হবে না। আপনার সিস্টেমের সাথে মেলে ফাইল থেকে আউটপুট কীভাবে ব্যাখ্যা করা যায় তা আপনাকে পরিবর্তন করতে হবে। তারপরে প্রতিবার প্রতিশ্রুতিবদ্ধ হওয়ার সাথে সাথে কেউ এই স্ক্রিপ্টটি কল করতে একটি প্রি-কমিট হুক সেট আপ করতে পারে।
import subprocess, os
git_root = subprocess.check_output(['git', 'root']).decode("UTF-8").strip()
exes = []
cut = len(git_root)
for root, dirnames, filenames in os.walk(git_root+"/src/"):
for fname in filenames:
f = os.path.join(root,fname)
if not os.access(f,os.X_OK):
continue
ft = subprocess.check_output(['file', f]).decode("UTF-8")
if 'ELF' in ft and 'executable' in ft:
exes.append(f[cut:])
gifiles = [ str.strip(a) for a in open(git_root + "/.gitignore").readlines() ]
gitignore=frozenset(exes+gifiles)
with open(git_root+"/.gitignore", "w") as g:
for a in sorted(gitignore):
print(a, file=g)
কেবলমাত্র একটি মূলের মধ্যেই নয়, কিছু সাবডিরেও উপেক্ষা করার উপায়:
# Ignore everything in a root
/*
# But not files with extension located in a root
!/*.*
# And not my subdir (by name)
!/subdir/
# Ignore everything inside my subdir on any level below
/subdir/**/*
# A bit of magic, removing last slash or changing combination with previous line
# fails everything. Though very possibly it just says not to ignore sub-sub-dirs.
!/subdir/**/
# ...Also excluding (grand-)children files having extension on any level
# below subdir
!/subdir/**/*.*
অথবা, আপনি যদি কিছু নির্দিষ্ট ধরণের ফাইল অন্তর্ভুক্ত করতে চান:
/*
!/*.c
!/*.h
!/subdir/
/subdir/**/*
!/subdir/**/
!/subdir/**/*.c
!/subdir/**/*.h
মনে হয় এটি প্রতিটি নতুন উপ-ডিরেক্টরিতেও চাইলে আপনার মতো কাজ করতে পারে !:
/*
!/*.c
!/*.h
!/*/
/*/**/*
!/*/**/
!/*/**/*.c
!/*/**/*.h
লিডিং স্ল্যাশগুলি কেবল প্রথম দুটি লাইনে গুরুত্বপূর্ণ এবং অন্যটিতে .চ্ছিক। টালিং স্ল্যাশ এর মধ্যে !/*/এবং !/subdir/এটি alচ্ছিক , তবে কেবল এই লাইনে।
আপনি যদি আপনার .gitignore ফাইল এবং এই ফাইলগুলিতে এই আদেশগুলি অনুসরণ করেন তবে মনে হয় আপনি চেষ্টা করতে চাইতে পারেন:
git rm --cached FILENAME
এরপরে, আপনার .gitignore যুক্ত করুন, প্রতিশ্রুতিবদ্ধ এবং পুশ করুন। এটি বুঝতে 40 মিনিট সময় নিয়েছেন, আশা করি এটি আমার মতো নবাগতদের সহায়তা করবে
পুরানো থ্রেড, তবে এখনও প্রাসঙ্গিক। আমি মেকফিলটি পরিবর্তন করেছি সুতরাং লিঙ্ক করার পরে ফলাফলযুক্ত বাইনারি ফাইলটির নাম [ফিলিভনাম] রয়েছে। বিন শুধুমাত্র পরিবর্তে [filname]। তারপরে আমি গিটিগনোরে * .bin ফাইল যুক্ত করেছি।
এই রুটিনটি আমার চাহিদা পূরণ করে।
আমি অন্য কোনও সমাধান জানি না তবে একে একে একে যুক্ত করে .gitignore।
পরীক্ষার একটি অপরিশোধিত উপায় হ'ল ফাইল কমান্ডের আউটপুট গ্রেপ করা:
find . \( ! -regex '.*/\..*' \) -type f | xargs -n 1 file | egrep "ASCII|text"
সম্পাদনা
আপনি কেবল মৃত্যুদন্ড কার্যকর করার নাম রাখেন না কেন hello.bin?
.binকরা খারাপ অভ্যাস।
আপনার .gitignore এ কেবল যোগ করুন helloবা যুক্ত করুন /hello। হয় কাজ করে।
hello।
আমি GOPATH ডিরেক্টরিতে দুটি এন্ট্রি সহ একটি .gitignore ফাইল তৈরি করেছি।
/bin
/pkg
এটি বর্তমানে সমস্ত সংকলিত বিকাশ উপেক্ষা করে।
.gitignore কমপক্ষে লিনাক্সে ফাইলগুলি ফিল্টার করতে গ্লোব প্রোগ্রামিং ব্যবহার করে।
আমি একটি মিটআপে কোডিং টক দিতে চলেছি এবং প্রস্তুতির জন্য, আমি বেশ কয়েকটি সাব-ডাইরেক্টরি দিয়ে একটি ডিরেক্টরি তৈরি করেছি যা আমি তাদের উপস্থাপন করতে চাইছি সেই আদেশ অনুসারে নামকরণ করা হয়েছে: 01_সুবজেক্ট 1, 02_সুবজেক্ট 2, 03_সুবজেক্ট 3। প্রতিটি উপ-ডিরেক্টরিতে একটি ভাষা-নির্ভর এক্সটেনশন সহ একটি উত্স ফাইল থাকে যা একটি এক্সিকিউটেবল ফাইলের সাথে সংকলন করে যার নাম সাধারণ অনুশীলন অনুযায়ী এক্সটেনশন ছাড়াই উত্স ফাইলের নামের সাথে মেলে।
সংক্ষিপ্ত ফাইলগুলি আমি নিম্নলিখিত .gitignore লাইনের সাথে সংখ্যা-উপসর্গযুক্ত ডিরেক্টরিতে বাদ দিই:
[0-9][0-9]_*/[!\.]*
ডকুমেন্টেশন সম্পর্কে আমার বোঝার অনুযায়ী এটি কাজ করা উচিত নয়। পিছনের নক্ষত্রটি ব্যর্থ হওয়া উচিত কারণ এটি 'সহ' সংখ্যক অনির্দিষ্ট অক্ষরের সাথে মেলে। + এক্সটেনশন। পিছনে অবস্থিত অ্যাসিডের্ককে ছাড়তে ব্যর্থ হওয়া উচিত (এবং হয়) কারণ [!\.]কেবলমাত্র একটি একক অ-পিরিয়ড চরিত্রের সাথে মেলে। যাইহোক, আমি নিয়মিত প্রকাশের জন্য যেমনটি করেছি, ততক্ষণে আমি যুক্ত করেছি, এবং এটি কার্যকর হয়। কাজের দ্বারা, আমি বলতে চাই যে গিট নোটিশগুলি উত্স ফাইলে পরিবর্তিত হয়, তবে সংঘবদ্ধ ফাইলগুলিতে অস্তিত্ব বা পরিবর্তন হয় না।
ভেনমভেন্ডারদের উত্তর উপর বিল্ডিং
# Ignore all
*
# Unignore all files with extensions recursively
!**/*.*
# Unignore Makefiles recursively
!**/Makefile
# other .gitignore rules...
আপনার .gitignore ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:
[^\.]*
ব্যাখ্যা:
[] encloses a character class, e.g. [a-zA-Z] means "any letter".
^ means "not"
\. means a literal dot - without the backslash . means "any character"
* means "any number of these characters"
.gitignoreপ্রক্রিয়াটি কেবল ফাইলের নামের উপর ভিত্তি করে কাজ করে, ফাইল সামগ্রীতে নয় । বাইনারি ফাইল হওয়া বিষয়বস্তুর সম্পত্তি, সুতরাং আপনি গিটকে সরাসরি বাইনারি ফাইলগুলি উপেক্ষা করতে বলতে পারবেন না, তবে কেবল নাম অনুসারে এড়িয়ে চলুন (এবং অন্যান্য পরামর্শ অনুসারে আপনি সমস্ত বাইনারি ফাইলের নাম আপনার বাছাই .gitignoreকরতে পারেন বা একটি উপযুক্ত ব্যবহার করতে পারেন নামকরণ কনভেনশন)।
সত্য যে .gitignoreফাইলের নাম উপর কাজ করে একটা গুরুত্বপূর্ণ বৈশিষ্ট্য কর্মক্ষমতা প্রজ্ঞাময়: গীত শুধুমাত্র তালিকা ফাইল প্রয়োজন, কিন্তু খুলুন এবং জানেন যা ফাইল উপেক্ষা করা তাদের পড়া না। অন্য কথায়, গিটটি যদি তাদের সামগ্রীর উপর ভিত্তি করে ফাইলগুলি উপেক্ষা করতে বলতে পারে তবে মারাত্মক ধীর হয়ে যাবে।