تطهير الملفات غير المقيدة مؤقتًا قبل الالتزام بالجيت

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

سؤال

كلما ارتكبت ، أشعر بالقلق من أنني قد فاتني التبعية وأبحث عن أبسط طريقة لاختبار شجرة git الخاصة بي في عزلة لضمان كل ما هو في مؤشر GIT ("SADAGED") في الواقع سوف يجمع/تشغيل ON ON خاصة بهم.

توجد تبعيات الكود الخاصة بي في نظام الملفات من حيث أقوم بـ "إضافة git" ، ولا تضمن اختبارات التجميع والتشغيل البسيطة للغاية أن يتم تجميع/تشغيل أي شيء أتحقق منه إذا تم تجميع الشجرة (أو منطقة التدريج) على نظام ملفات نظيفة .

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

شيء واحد فكرت فيه هو استخدام Git Stash مرتين ، أي:

  1. استدعاء "Git Stash" لحفظ الملفات في الفهرس
  2. احصل بطريقة أو بأخرى على قائمة بالملفات التي لم يتم تتبعها ، "GIT أضف" كل هذه الملفات ، احفظ مخبأًا جديدًا
  3. احذف جميع الملفات غير المُصفعة مسبقًا
  4. استعادة المخبأ الأصلي
  5. يجب أن يكون لدي الآن بيئة نظيفة تحتوي فقط على الرمز الذي تم فحصه بالفعل والرمز في منطقة التدريج التي يمكنني تجميعها واختبارها.
  6. بمجرد الانتهاء ، أسترجع خبأ الملفات غير المقيدة ثم قم بفكها لتركني في نفس الموقف الذي كنت فيه في الأصل.

(قد تكون هذه الملفات غير المقيدة مفيدة ولكن ليس بالضرورة أشياء أريد تسجيل الوصول إلى مستودع المشاريع - مثل مشاريع Eclipse).

لدي شعور بأنني أفرط في الهندسة مشكلة بسيطة.

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

المحلول

قم بتثبيت هذا البرنامج النصي (أو شيء من هذا القبيل-تم سرقة الألغام أيضًا) كخطاف مسبقًا. يقوم بنسخ الفهرس إلى DIR العمل المؤقت ويدير بناء هناك. سوف يلتقط الملفات التي فاتتك.

أعلم أن هناك ما لا يقل عن واحد أو اثنتين من الأسئلة التي تتناول هذه المشكلة الدقيقة-اختبار/التحقق من صحة الفهرس بدلاً من DIR العاملة في خطاف ما قبل الالتزام-لكن لا يمكنني العثور عليها الآن.

(من أجل الاكتمال ، حصلت على هذا البرنامج النصي في repo الخاص بي كـ .git-hooks/pre-commit/test-the-index ؛ وهناك بعض البرامج النصية الأخرى هناك. انظر أدناه لما أستخدمه كـ .git/ السنانير/ما قبل الالتزام.)

#!/bin/sh
#
# Via: http://github.com/jwiegley/git-scripts/blob/master/pre-commit.sh
#

if [ ! $(git rev-parse --symbolic-full-name HEAD) = refs/heads/master ]; then
    exit 0
fi

# These are the locations I keep my temporary source and build trees in
TMPDIR=$HOME/code/myproject-pre-commit
MIRROR=$HOME/code/myproject-pre-commit-mirror

# Exit with status 1 if any command below fails
set -e

# Checkout a copy of the current index into MIRROR
git checkout-index --prefix=$MIRROR/ -af

# Remove files from MIRROR which are no longer present in the index
git diff-index --cached --name-only --diff-filter=D -z HEAD | \
    (cd $MIRROR && xargs -0 rm -f --)

# Copy only _changed files_ from MIRROR to TMPDIR, without copying timestamps.
# This includes copying over new files, and deleting removed ones.  This way,
# "make check" will only rebuild what is necessary to validate the commit.
rsync -rlpgoDOc --delete --exclude-from=.git-hooks/excludes $MIRROR/ $TMPDIR/

# Everything else happens in the temporary build tree
cd $TMPDIR

nosetests

exit 0

هذا هو الخاص بي .git/hooks/pre-commit:

#!/bin/bash

set -e
for hook in $(find .git-hooks/pre-commit -perm /u+x,g+x,o+x -type f -not -name '*~' 2>/dev/null)
do
  echo "@@ Running hook: $(basename $hook)"
  $hook "$@"
done

نصائح أخرى

git stash -u --keep-index قبل الاختبار ، تليها git stash pop بعد الاختبار.

يتجاهل الإعداد للملفات المهمة ومحو تلك غير المهمة ببساطة git clean -df

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