একটি ফাইল বাদে সমস্ত ফাইল কমিটে যুক্ত করবেন?


569

আমার একটি চেঞ্জসেটে অনেকগুলি ফাইল রয়েছে তবে আমি বিশেষভাবে একটি একক পরিবর্তিত ফাইল উপেক্ষা করতে চাই। এর পরে দেখে মনে হচ্ছে git status:

# modified:   main/dontcheckmein.txt
# deleted:    main/plzcheckmein.c
# deleted:    main/plzcheckmein2.c
...

আমি যেভাবে করতে পারি তার কোনও উপায় আছে git addতবে কেবলমাত্র আমি স্পর্শ করতে চাই না এমন একটি পাঠ্য ফাইলটি উপেক্ষা করুন? কিছুটা এইরকম:

git add -u -except main/dontcheckmein.txt

উত্তর:


850
git add -u
git reset -- main/dontcheckmein.txt

28
আমি কীভাবে পুরো ফোল্ডারটি বাদ দেব? - প্রধান বা প্রধান / বা প্রধান / *?
অ্যালান করোমানো

8
@ মারিয়াসকাভানস্কি আপনি এই সমস্ত ফর্ম ব্যবহার করতে পারেন। আপনি যদি main/*এটি ব্যবহার করেন --তবে গিটকে এটি যে একটি পথ বলে তা জানানোর জন্য এটির সামনে যুক্ত করা প্রয়োজন । অন্যান্য দুটি ভেরিয়েন্ট দুটি ড্যাশ যুক্ত না করেই কাজ করে। (এমএসজিজিট সহ উইন্ডোজ on-এ কমান্ড প্রম্পটে পরীক্ষিত)
dennisschagt

2
আপনার যদি কিছু ফোল্ডার থাকে তবে আপনি যে ফাইল বা অন্যান্য ফোল্ডারগুলির একটি বিশাল পরিমাণ রয়েছে তা বাদ দিতে চান: অস্থায়ীভাবে সেগুলি আপনার গিটিংগোরগুলিতে যুক্ত করুন। git resetপরে এই ফোল্ডারগুলির জন্য একটি সম্পাদনা করা এখনও কাজ করবে তবে বড় ফোল্ডারগুলি যুক্ত করতে বেশ কিছুক্ষণ সময় লাগবে।
মাইকেল ট্রাও

2
তো, ওয়ান লাইনার নেই?
ব্রোভিক

5
@ জেন জ্যাকসন প্রতিটি লাইনে মন্তব্য করতে ভাল লাগবে, আপনি কি ভাবেন না?
ed1nh0

140

1) একক ইতিমধ্যে সংস্করণযুক্ত ফাইলের পরিবর্তনগুলি উপেক্ষা করা শুরু করা

git update-index --assume-unchanged "main/dontcheckmein.txt"

এবং এটি পূর্বাবস্থায় ফেরা git update-index --no-assume-unchanged "main/dontcheckmein.txt"

ফাইল উপেক্ষা করার জন্য গিথুব ডক্স

2) কোনও নির্দিষ্ট একক ফাইল এটির সংগ্রহস্থলে তৈরি হওয়া থেকে বিরত রেখে সম্পূর্ণ উপেক্ষা করা

প্রথমে, এই স্ট্যাকওভারফ্লো পোস্টটি দেখুন: গিট গ্লোবাল কাজ করছে না তা উপেক্ষা করুন

ইন .gitignore, নেতৃত্ব ছাড়াই ফাইলের সাথে আপেক্ষিক পথ যুক্ত করুন ./

সুতরাং, যদি আপনার ফাইল এ MyProject/MyFolder/myfile.txt, (যেখানে .gitরয়েছেন MyProjectফোল্ডার), অ্যাড MyFolder/myfile.txtআপনার কাছে .gitignoreফাইল।

কোন নিয়মগুলি উপেক্ষা করার সাথে যুক্ত তা আপনি নিশ্চিত করতে পারেন git check-ignore "MyFolder/myfile.txt"

বিশ্বব্যাপী উপেক্ষা সম্পর্কে

সেই লিঙ্কটি সম্পর্কে কথা বলা হয়েছে ~/.gitignore_global, তবে ফাইলটি আপনার প্রকল্পের সাথে সম্পর্কিত। সুতরাং, যদি আপনি করা প্যাটার্ন অগ্রাহ্য MyFolder/myfile.txtমধ্যে ~/.gitignore_global, এটা কাজ করবে কিন্তু অনেক অর্থে দেখা যায় না হবে ...

অন্যদিকে, যদি আপনি সেটআপ আপনার প্রকল্পের git config core.excludesfile .gitignoreযেখানে .gitignoreরয়েছে MyProject, স্থানীয় ফাইল ওভাররাইড করবে ~/.gitignore_global, থাকতে পারে যা খুব দরকারী নিয়ম ...

সুতরাং, এখন জন্য, আমি মনে করি এটি আপনার মিশ্রিত করা কিছু স্ক্রিপ্ট করতে সেরা .gitignoreসঙ্গে ~/.gitignore_global.gitignore

একটি শেষ সতর্কতা
আপনি যে ফাইলটি উপেক্ষা করতে চান তা যদি ইতিমধ্যে সংগ্রহস্থলে থাকে তবে আপনি যদি না করেন তবে এই পদ্ধতিটি কাজ করবে না: git rm "MyFolder/myfile.txt"তবে প্রথমে এটি ব্যাক আপ করুন, কারণ এটি স্থানীয়ভাবেও সরানো হবে! আপনি পরে এটি অনুলিপি করতে পারেন ...


5
আপনি git rm --cached MyFolder/myyfile.txtসংগ্রহস্থল থেকে ফাইলটি সরাতে ব্যবহার করতে পারেন তবে স্থানীয়ভাবে এটি রাখতে পারেন। Help.github.com- এর উপর ব্যাখ্যা
dennisschagt

87

একটি ফাইলের জন্য

git add -u
git reset -- main/dontcheckmein.txt

একটি ফোল্ডারের জন্য

git add -u
git reset -- main/*

9
কেন দরকার? কেন না git add . && git reset -- main/*?

2
-U অপশনটি সূচকটি ঠিক আপডেট করে যেখানে এটি ইতিমধ্যে <pathspec> এর সাথে মিলছে entry এটি কার্যকারী গাছের সাথে মেলানোর জন্য সূচী এন্ট্রিগুলিকে পরিবর্তন করে পাশাপাশি কোনও নতুন ফাইল যুক্ত করে না। -U বিকল্পটি ব্যবহার করার সময় যদি কোনও <pathspec> না দেওয়া হয় তবে পুরো কার্যক্ষম গাছের সমস্ত ট্র্যাক করা ফাইল আপডেট করা হয় (বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে আপডেট সীমাবদ্ধ করতে ব্যবহৃত গিটের পুরানো সংস্করণ)।
ফরহাদ মামাদলি

6
যে-ভাষায় নন-গিট পেশাদাররা বুঝতে পারবেন কেন তার প্রয়োজনীয়তা কেন কেউ ব্যাখ্যা করতে পারেন?
প্যাট্রিক

2
-উ আপনার বর্তমান শাখাকে উল্লেখ করতে ব্যবহৃত হয় যা আপনি চাপ দিচ্ছেন। আপনার আর git push origin masterআপনার পরবর্তী ধাক্কা টাইপ করার প্রয়োজন হবে না , ন্যায়বিচার git pushএবং গিট এটি জানতে পারে যে এটি মাস্টার শাখায় রয়েছে। আশা করি এটা সাহায্য করবে.
পেপেং হ্যাপন

69

এখন প্যাথস্পেক যাদু এবং এর সংক্ষিপ্ত ফর্ম দ্বারা gitসমর্থন exclude certain paths and filesকরে । সুতরাং আপনি এটি নিম্নলিখিত কমান্ড হিসাবে সহজেই অর্জন করতে পারেন।:(exclude):!

git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt

আসলে আপনি আরও নির্দিষ্ট করতে পারেন:

git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*

1
সেরা উত্তর, ধন্যবাদ! কমপক্ষে, আমার ক্ষেত্রে: আমার কেবল একটি ফাইলের প্রকার বাদ দিতে হবে।
আন্দ্রে পোলিকানাইন

15
এটি দুর্দান্ত! নোট করুন যে লিনাক্সে, আপনাকে :!...শেলটিকে অভিযোগ থেকে বিরত রাখতে ক্লজগুলি উদ্ধৃত করতে হবে। সুতরাং, উদাহরণস্বরূপ: git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
মার্টিন_ডাব্লু

কিছু আছে কি :!/path/to/(file1|file2)?
সন্ধানকারী_আফ_ব্যাকন

এটি zsh এর কোনও কিছুর সাথে সংঘর্ষ হয়, ম্যাকোস এবং সর্বশেষ গিট নিয়ে আমার পক্ষে কাজ করে না।
মার্লিন

1
এটি সরকারীভাবে নথিভুক্ত যেখানে কেউ নির্দেশ করতে পারেন?
সামুরাই_জানে

20

বেন জ্যাকসন সঠিক হলেও, আমি ভেবেছিলাম যে আমি কীভাবে সেই সমাধানটি ব্যবহার করছি add নীচে একটি খুব সহজ স্ক্রিপ্ট আমি ব্যবহার করি (যা আমি গিটাড্ড কল করি) নামক একটি ফাইলে তালিকাভুক্ত কয়েকটি নির্বাচন বাদে সমস্ত পরিবর্তন যুক্ত করতে .gittrackignore(যেভাবে .gitignore কীভাবে কাজ করে তার সাথে খুব মিল)।

#!/bin/bash
set -e

git add -A
git reset `cat .gittrackignore`

এবং এটি আমার বর্তমানের .gittrackignoreমতো দেখাচ্ছে।

project.properties

আমি একটি অ্যান্ড্রয়েড প্রকল্পে কাজ করছি যা আমি মোতায়েনের সময় কমান্ড লাইন থেকে সংকলন করি। এই প্রকল্পটি শার্লক অ্যাকশনবারের উপর নির্ভর করে, তাই এটি প্রজেক্টে প্রকাশিত হওয়া দরকার rop প্রপার্টিগুলি, তবে এটি সংকলনের সাথে মেসেজ করে, তাই এখন আমি কেবলমাত্র gitaddপ্রতিটি বারে প্রজেক্ট.প্রপ্রেটিগুলি যুক্ত না করেই গিটটিতে সমস্ত পরিবর্তন যুক্ত করে থাকি ।


--আপনার মন্তব্য না হওয়া পর্যন্ত আমি জানতাম না । ম্যান পেজ অনুসারে, এটি এর optionচ্ছিক এবং কমান্ডের ফলাফল পরিবর্তন করে না (অন্তত এই ক্ষেত্রে)। এই প্রশ্নটি সমর্থন করে বলে মনে হচ্ছে, stackoverflow.com/questions/17800994/… । আমি ভুল হলে আমাকে সংশোধন করুন, তবে মনে হয় এর অর্থ " --বিকল্পের পরে কোনও কিছুকেই বিবেচনা করুন, বিকল্পগুলি / স্যুইচ নয়"
অ্যান্টনি নাদদেও

হলাম ব্যবহার --মধ্যে git checkoutআমি যে প্রশ্নে দেখুন। আমাদেরও এই বিনিময় হওয়া পর্যন্ত ডাবল ড্যাশ কী তা আমি জানতাম না। আমি ভাবছি যে git checkoutশাখা এবং ফাইলগুলির মধ্যে অস্পষ্টতা এই বা অন্য কোনও আকারেও প্রভাব ফেলতে পারে git reset
Giulio Piancastelli

10

ফাইল পরিবর্তন রাখতে কিন্তু প্রতিশ্রুতিবদ্ধ না হয়ে আমি এটি করেছি did

git add .

git reset -- main/dontcheckmein.txt

git commit -m "commit message"

ফাইল যাচাই করতে বাদ দেওয়া হয়

git status


4

git add -Aএকবারে সমস্ত সংশোধিত এবং নতুন যুক্ত হওয়া ফাইল যুক্ত করতে ব্যবহার করুন।

উদাহরণ

git add -A
git reset -- main/dontcheckmein.txt



1

প্রশ্নের নির্দিষ্ট ক্ষেত্রে, সবচেয়ে সহজ উপায় হ'ল .c এক্সটেনশান সহ সমস্ত ফাইল যুক্ত করা এবং সমস্ত কিছু বাদ দেওয়া:

git add *.c

থেকে Git-এস সি এম (অথবা / এবং man git add):

গিট অ্যাড <pathspec>…

ফাইলগুলি থেকে সামগ্রী যুক্ত করতে। ফাইলগ্লবগুলি (যেমন * .c) সমস্ত মিলে যাওয়া ফাইল যুক্ত করতে দেওয়া যেতে পারে। <...>

মনে রাখবেন এর অর্থ এই যে আপনি এই জাতীয় কিছু করতেও পারেন:

git add **/main/*

mainফোল্ডারে থাকা সমস্ত ফাইল (যা উপেক্ষা করা হয় না) যুক্ত করতে । আপনি আরও বিস্তৃত নিদর্শন সহ বন্য যেতে পারেন:

git add **/s?c/*Service*

উপরেরগুলি s(any char)cফোল্ডারে থাকা সমস্ত ফাইল যুক্ত করবে এবং Serviceকোথাও তাদের ফাইলের নাম থাকবে।

স্পষ্টতই, আপনি আদেশ অনুসারে একটি প্যাটার্নের মধ্যে সীমাবদ্ধ নন। অর্থাৎ, আপনি গিটকে সমস্ত ফাইল যুক্ত করতে বলেছেন যা .c এবং .h এর এক্সটেনশন রয়েছে :

git add *.c *.h

এই লিঙ্কটি আপনাকে আরও কিছু গ্লোব প্যাটার্ন ধারণা দিতে পারে।

আমি অনেকগুলি পরিবর্তন আনার সময় এটি বিশেষভাবে দরকারী বলে মনে করি, তবে এখনও আমার প্রতিশ্রুতিগুলি পারমাণবিক থেকে যায় এবং আমি সেই সময়ে যে পরিবর্তনগুলি সম্পাদন করতে পারি তার পরিবর্তে ধীরে ধীরে প্রক্রিয়া প্রতিবিম্বিত করতে চাই। অবশ্যই, এক পর্যায়ে বিস্তৃত নিদর্শনগুলির সাথে আগত ব্যয় সহজ পদ্ধতিগুলির সাথে ফাইলগুলি যোগ করার ব্যয় বা একসাথে একটি ফাইলের চেয়েও বেশি। যাইহোক, বেশিরভাগ সময় আমি খুব সহজেই আমার সাধারণ প্যাটার্ন দিয়ে আমার প্রয়োজনীয় ফাইলগুলি চিহ্নিত করতে এবং অন্য সমস্ত কিছু বাদ দিতে পারি।

যাইহোক, তাদের কাজ করার জন্য আপনার গ্লোব নিদর্শনগুলি উদ্ধৃত করার প্রয়োজন হতে পারে তবে এটি আমার পক্ষে কখনও হয়নি।


0

আমি git add --patchবেশ খানিকটা ব্যবহার করেছি dএবং একই রকম ফাইলের মাধ্যমে সারাক্ষণ আঘাত হানা এড়াতে এই জাতীয় কিছু চাইছিলাম । কাজটি করার জন্য আমি গিট এলিয়াসগুলির একটি অত্যন্ত মজাদার দম্পতিকে বেত্রাঘাত করেছি:

[alias]
    HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
    ap                      = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"

আমার ক্ষেত্রে আমি কেবল সর্বদা নির্দিষ্ট মাইনযুক্ত ফাইলগুলিকে উপেক্ষা করতে চেয়েছিলাম, তবে আপনি এটি $GIT_EXCLUDE_PATTERNআরও সাধারণ ব্যবহারের ক্ষেত্রে যেমন পরিবেশের পরিবর্তনশীল ব্যবহার করতে পারেন।


0

প্রতিশ্রুতিবদ্ধ হতে পরিবর্তনগুলি: (স্টেঞ্জার জন্য "গিট রিসেট হেড ..." ব্যবহার করুন)


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.