غير قادر على العثور على .gitconfig في التزامات Git القديمة

StackOverflow https://stackoverflow.com/questions/1053994

  •  20-08-2019
  •  | 
  •  

سؤال

لقد لاحظت منذ لحظة أن بلدي .gitconfig -كان الملف عامًا في الريبو الخاص بي.أنه يحتوي على الرموز السرية الخاصة بي.

أنا git-add -u الملف وملتزم.لست متأكدًا مما إذا كان هذا الأمر يزيل الملف من الالتزامات السابقة أيضًا.

أريد التأكد من الملف والبحث فيه في التزاماتي السابقة بحيث لا يوجد مثل هذا الملف في سجلي.

كيف يمكنك البحث في الملف في الالتزامات السابقة؟


انا اجري

git filter-branch --tree-filter 'rm .gitconfig' master     # Thanks to Greg!

انا حصلت

Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory
tree filter failed: rm .gitconfig

تشير رسالة الخطأ إلى أنه ليس لدي الملف في سجل الالتزام الخاص بي.

هل هناك أي طريقة للبحث في الملف في سجل الالتزام الخاص بي بحيث لا أحتاج إلى تشغيل عملية الإزالة للتأكد من عدم وجود الملف في سجل الالتزام الخاص بي؟

هل كانت مفيدة؟

المحلول

اجابة قصيرة:

git filter-branch --tree-filter 'rm -f .gitconfig' master   

لاحظ ال -f.

اجابة طويلة:

rm سيُرجع رمز إرجاع غير صفري عندما لا يكون الملف موجودًا. filter-branch أعتقد أن هذا خطأ وأوقف إعادة الكتابة.إضافة -f تجنب هذا.

ملحوظة:

هناك أمر بديل:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master

وهو أسرع بكثير.تم توثيق هذا الأمر في قسم "المثال" في صفحة الدليل.

نصائح أخرى

لإزالة ملف من كل سجل Git السابق، ستحتاج إلى إعادة كتابة جميع الالتزامات السابقة باستخدام شيء من هذا القبيل git filter-branch.ومع ذلك، فإن القيام بذلك يجعل شجرتك الجديدة غير قابلة للدمج مع جميع الأشجار السابقة، لذا افعل ذلك بحذر.

إعادة تعيين جميع ewvisions في المستودع إلى الإعدادات الافتراضية العامة (.gitconfig).

git filter-branch -f --commit-filter 'GIT_COMMITTER_NAME="`git config --get user.name`";GIT_AUTHOR_NAME="`git config --get user.name`";GIT_COMMITTER_EMAIL="git config --get user.email";GIT_AUTHOR_EMAIL="`git config --get user.email`";git commit-tree "$@";' HEAD
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top