GIT: كيفية تحليل الكود الذي يحتوي على تاريخ متعدد الملفات؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

أنا على وشك نقل الكثير من الملفات في مشروع موجود. قبل أن أفعل ذلك ، أرغب في فهم بعض التقنيات المستخدمة لتحليل الكود الذي يحتوي على تاريخ متعدد الملفات.

كيف يمكنني استخدام Git لأسأل: "من أين جاء خط الرمز هذا؟" عندما ينتقل المحتوى عبر ملفات متعددة في وقت الحياة؟

أعلم أن git لا يتتبع تسمية إعادة تسمية بشكل صريح (لسبب وجيه) ، لذلك يبدو أنني يجب أن أكون قادرًا على طرح هذا ، لست متأكدًا من كيفية ذلك. إذا كانت هناك طريقة لتصور هذا سيكون من الرائع معرفة ذلك أيضًا.

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

المحلول

أوصي بالبحث عن ثلاث أدوات في صندوق أدوات GIT. الأول هو اللوم ، وهو نفس الشيء كما هو الحال في السير الذاتية. إنه يوضح لك الذي يرتكب آخر مرة لمست كل سطر في ملف. إذا كنت تريد أن تنظر لمعرفة ما كان هناك من قبل ، فيمكنك أن تأخذ الالتزام الذي لمست الخط والنظر إلى الالتزام السابق.

git show <sha1_of_interesting_commit>^ -- file/path

يمكنك تكرار اللوم لمعرفة ما حدث قبل ذلك.

git blame <sha1_of_interesting_commit>^ -- file/path

الأداة الثانية تستخدم --follow لتتبع الملفات في الماضي إعادة تسمية.

git log --follow -- file/path

الأداة الثالثة - وربما الأكثر فائدة - هي خيار Pickaxe للتسجيل. يبحث هذا عن تاريخ التغييرات التي تمت إزالتها أو تقديمها أو تغييرها والتي تتضمن جزءًا معينًا من النص. هذا مفيد بشكل خاص لتتبع الأشياء مثل أسماء الوظائف. قد يكون جديدًا في ملف في التزام معين ، لكن هل جاء من ملف مصدر مختلف؟ هل تمت إضافة مكالمة إليها في نفس الوقت ، أو قبل نقلها؟

git log -S"Interesting_Function"

إذا كنت تستخدم خيار التصحيح أو الأساسي (على سبيل المثال -p أو --stat) سيتم تقييد الإخراج على تلك الملفات التي تنطوي تغييرات على سلسلة البحث فعليًا ما لم تستخدم أيضًا --pickaxe-all حيث يتم عرض التغيير كله.

مدموج مع git grep لإظهار مكان وجود جميع الأحداث الحالية للسلسلة ، يعد Pickaxe أداة تعدين مفيدة للغاية.

نصائح أخرى

git blame هل ما ستستخدمه لسؤاله "من أين جاء خط الرمز؟". لا أعرف إذا كان ذلك يتعامل مع إعادة تسمية. ربما يفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top