تجاهل الملفات التي تلتزم بالفعل بمستودع GIT [مكررة
-
16-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
لدي مستودع جيت تهيئة بالفعل قمت بإضافة .gitignore
ملف إلى. كيف يمكنني تحديث فهرس الملف بحيث يتم تجاهل الملفات التي أريد تجاهلها؟
المحلول
إلى Untrack أ غير مرتبطة ملف تم إضافته بالفعل / تهيئة إلى مستودعك، بمعنى آخر, ، توقف عن تتبع الملف ولكن لا يحذفه من استخدام النظام الخاص بك: git rm --cached filename
إلى Untrack. كل ملف الآن في حياتك .gitignore
:
ارتكب أولا أي تغييرات رائعة, ثم، قم بتشغيل هذا الأمر:
git rm -r --cached .
هذا يزيل أي ملفات غيرت من فهرس(منطقة التدريج)، ثم تشغيل فقط:
git add .
ارتكبها:
git commit -m ".gitignore is now working"
للتراجع git rm --cached filename
, ، استعمال git add filename
.
تأكد من ارتكاب جميع التغييرات المهمة قبل التشغيل
git add .
خلاف ذلك، سوف تفقد أي تغييرات على الملفات الأخرى.
نصائح أخرى
إذا كنت تحاول تجاهل التغييرات في ملف تم تتبعه بالفعل في المستودع (مثل ملف Dev.Properties الذي ستحتاج إلى تغييره في بيئتك المحلية، لكنك لن ترغب أبدا في التحقق من هذه التغييرات) من ما تريد القيام به يكون:
git update-index --assume-unchanged <file>
إذا كنت تريد أن تبدأ في تتبع التغييرات مرة أخرى
git update-index --no-assume-unchanged <file>
يرى GIT-Update-Index (1) صفحة يدوية.
أيضا إلقاء نظرة على skip-worktree
و no-skip-worktree
خيارات لتحديث الفهرس إذا كنت بحاجة إلى هذا لاستمرار في الماضي إعادة تعيين GIT (عبر)
تحديث: نظرا لأن الأشخاص يسألون، إليك هنا مريحة (وتحديثا منذ ذلك الحين على أساس أدناه) لرؤية الملفات التي يتم "تجاهلها" حاليا (- دون تغيير) في مساحة عملك المحلية
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
لإعادة إخراج ملف تم إضافته بالفعل / تهيئه إلى مستودعك، أي التوقف عن تتبع الملف ولكن لا يحذفه من استخدام النظام الخاص بك: git rm --cached filename
نعم - .gitignore
يتجاهل النظام فقط الملفات غير الموجودة حاليا تحت عنصر تحكم الإصدار من GIT.
أي إذا كنت قد أضفت بالفعل ملف يسمى test.txt
استخدام git-add
, ، ثم مضيفا test.txt
ل .gitignore
سوف لا تزال تتسبب في تغييرات test.txt
لتتبعها.
سيكون لديك ل git rm test.txt
أولا وارتكب هذا التغيير. فقط ثم سوف يتغير إلى test.txt
يتم تجاهلها.
إزالة whitespace زائدة في. gitignore
أيضا، تأكد من عدم وجود Whitespace زائدة في .gitignore الخاص بك. حصلت على هذا السؤال لأنني كنت أبحث عن إجابة، ثم كان لدي شعور مضحك يجب أن أفتح المحرر بدلا من القطط فقط. gitignore. إزالة مساحة واحدة إضافية من النهاية و بوف انه يعمل الان :)
اتبعت هذه الخطوات
git rm -r --cached .
git add .
git reset HEAD
بعد ذلك، حذف GIT جميع الملفات (* .wp في حالتي) التي يجب أن تتجاهلها.
إذا كنت ترغب في إيقاف تتبع الملف دون حذف الملف من النظام المحلي الخاص بك، فإنني أفضل تجاهل config/database.yml
ملف. ببساطة حاول:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
الآن، أضف هذا الملف إلى .gitignore
ملف وارتكاب التغييرات. من الآن فصاعدا، لن يتم تتبع أي تغييرات تم إجراؤها على التكوين / قاعدة البيانات.
$ echo config/database.yml >> .gitignore
شكرا
إجابات معقدة في كل مكان!
فقط استخدم ما يلي
git rm -r --cached .
سيقوم بإزالة الملفات التي تحاول تجاهلها من الأصل وليس من السيد على جهاز الكمبيوتر الخاص بك!
بعد ذلك الالتزام والدفع!
لإزالة عدد قليل من الملفات المحددة فقط من تعقبها:
git update-index --assume-unchanged path/to/file
إذا كنت تريد أن تبدأ في تتبع ذلك مرة أخرى:
git update-index --no-assume-unchanged path/to/file
كما يقول DAV_I، من أجل الحفاظ على الملف في Repo ومع ذلك إزالته من التغييرات دون إنشاء ارتكاب إضافي، يمكنك استخدامه:
git update-index --assume-unchanged filename
عدم معرفة ما فعلت أمر "الإجابة"، لقد ركضت، الكثير ل disay. يزيل بشكل متكرر كل ملف من Repo Git الخاص بك.
stackoverflow إلى الإنقاذ ... كيفية العودة "جيت RM -R"؟
git reset HEAD
هل كانت الخدعة، لأنني تعاني من ملفات محلية غير ملزمة لا أريد الكتابة فوقها.
هناك اقتراح آخر ربما للرجال البطيء مثلي =) ضع .gitignore. ملف في جذر مستودع الخاص بك ليس في .شخص سخيف مجلد. هتافات!
أيا من الإجابات عملت بالنسبة لي.
في حين أن:
- انقل الملف من الدليل الذي يتم التحكم فيه GIT
- تحقق من الإزالة في جيت
- انقل الملف مرة أخرى إلى الدليل الذي يتم التحكم فيه
بعد نقل الملف مرة أخرى، سوف يتجاهلها GIT.
يعمل مع الدلائل أيضا!
مشكلة أخرى كنت قد قدمت تعليق مضمون.
tmp/* # ignore my tmp folder (this doesn't work)
هذا يعمل
# ignore my tmp folder
tmp/
إذا كانت الملفات بالفعل في عنصر تحكم الإصدار، فأنت بحاجة إلى إزالتها يدويا.
بفضل إجابتك، كنت قادرا على كتابة هذا الخطوط الداخلية الصغيرة لتحسينه. ركضت ذلك على بلدي .gitignore وريبو، وليس له أي مشاكل، ولكن إذا رأى أي شخص أي مشاكل صارخة، يرجى التعليق. هذا يجب git rm -r --cached
من .gitignore
:
CAT $ (GIT Rev-Parse - Toplevel) /. Gitignore | SED "S // $ //" | Grep -v "^ #" | XARGS -L 1 -I {} البحث $ (GIT Rev-Parse - Toplevel) -NAME "{}" | Xargs -l 1 git rm -r - cachached
لاحظ أنك ستحصل على الكثير من fatal: pathspec '<pathspec>' did not match any files
. وبعد هذا فقط للملفات التي لم يتم تعديلها.
لقد وجدت مشكلة غريبة مع. gitignore. كان كل شيء في مكانه ويبدو صحيحا. السبب الوحيد الذي يجعل بلدي .gitignore "تجاهل" كان، أن خط النهاية كان في شكل ماك ( r). لذلك بعد حفظ الملف باستخدام الخط الصحيح (في السادس باستخدام: SET FF = UNIX) كل شيء يعمل مثل سحر!
مشكلة أخرى غير مذكورة هنا هي إذا قمت بإنشاء .gitignore الخاص بك في Windows Notepad، فيمكن أن تبدو وكأنها رطانة على منصات أخرى كما اكتشفت. المفتاح هو التأكد من تعيين الترميز على ANSI في المفكرة (أو قم بإجراء الملف على Linux كما فعلت).
من إجابتي هنا: https://stackoverflow.com/a/11451916/406592.
في خادم خادم Linux الخاص بي (غير صحيح على Dev Mac المحلي الخاص بي)، يتم تجاهل الدلائل طالما أنني لا أضيف علامة النجمة:
www / أرشيف / *
لا أعرف لماذا لكنني جعلني أفقد بضع ساعات، لذلك أردت مشاركة ...
شيء واحد له أيضا في الاعتبار إذا .gitignore
لا يبدو أنه يتجاهل الملفات غير المتناثرة هو أنه لا ينبغي أن يكون لديك تعليقات على نفس السطر مثل التجاهل. لذلك هذا جيد
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
ولكن هذا لن يعمل:
foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.
.gitignore
يفسر الحالة الأخيرة باسم "تجاهل الملفات المسماة "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc."
, ، والتي، بالطبع، ليس لديك.
إذا كنت بحاجة إلى التوقف عن تتبع الكثير من الملفات التي تم تجاهلها، فيمكنك الجمع بين بعض الأوامر:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
هذا سوف يتوقف عن تتبع الملفات المجهولة. إذا كنت ترغب في إزالة الملفات فعليا من نظام الملفات، فلا تستخدم --cached
اختيار. يمكنك أيضا تحديد مجلد للحد من البحث، مثل:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm