Питання Обхід попередньо закріплений гачок під час `git revert'continue`


Я робив це git revert (попереднього повернення), що викликало деякі конфлікти злиття. Після вирішення конфліктів мій попередній крючок кинув деякі проблеми сніффера коду.

Оскільки ці сповіщення про код-сніфферу фіксуються в іншому місці, я хотів би обійти заздалегідь закріплений гачок на цьому етапі, використовуючи git revert --continue --no-verify, мабуть git revert не має --no-verify підкоманда

git revert має а --no-commit Підкоманда, але це не працює в поєднанні з --continue.

Я закінчився перейменуванням pre-commit файл, але з цікавості. Чи є кращий ват, щоб обійти попередньо вчинені гачки в той момент?


12
2017-09-14 10:06


походження


мав те саме питання і вирішив це як ви: я створив файл hooks.sh що приймає один аргумент: enable або disable. При годуванні disable, Я беру свій попередній крючок і перейменовую його pre-commit.disabled. Після цього я зателефоную ./hooks.sh enable який перейменує файл до pre-commit - eckes
Так, єдиний варіант полягає в тому, щоб видалити каталог гачок, виконати команду git revert - продовжити, а потім виконати скидання git - hard HEAD. - kboom
Ви також можете просто тимчасово вимкнути свої гачки: git git config core.hooksPath "" а потім після того, як ви закінчите з revert --continue, поверніть його знову git config core.hooksPath hooks/ (припускаючи, що ваш шлях до гаків є /hooks) Це не спрацює, якщо ви просто хочете вимкнути попередній гачок (і хочете, щоб ваша гачок для пост-компітатора продовжував працювати, наприклад). - combinatorist


Відповіді:


Зміна гачків

Якщо ви можете змінити гачки, ти можеш просто додати перемикач для кожного один Або просто використовуйте скрипт, щоб тимчасово перейменувати дані гачок, як коментує.

У будь-якому випадку буде вибірково пропустити проблемний гачок дозволяючи інші працюють нормально. Це гарантує виконання інших перевірок (якщо вони існують), наприклад, перевірка коректності повідомлення з commit-msg  гачок.

Забезпечення

Якщо це не застосовується, є альтернатива:

Зазвичай, коли операцію зупиняє конфлікт, після його фіксації ви можете просто біжи

git commit

замість

git $operation --continue

Це відноситься до revert, merge, cherry-pick та можливо інші (хоча в rebase він може поводитися інакше, оскільки це послідовність операцій).

Так, як зазначалося, обійти гачки, ви можете просто додати --no-verify:

git commit --no-verify

Примітка: Ця функція, здається, недокументована, але вона WorksForMe (tm).

З дифф strace git commit і strace git revert --continue, the Колишній робить багато інших речей (515 проти 173 рядків, відповідно), наприклад перевіряючи, чи відбувається перезавантаження, та створити деякі тимчасові файли в $GIT_DIR/objects. Приклад:

stat(".git/MERGE_HEAD", 0x7ffefb5d0760) = -1 ENOENT (No such file or directory)
stat(".git/rebase-apply", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/rebase-merge", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/CHERRY_PICK_HEAD", 0x7ffefb5d0760) = -1 ENOENT (No such file or directory)
stat(".git/BISECT_LOG", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/REVERT_HEAD", {st_mode=S_IFREG|0644, st_size=41, ...}) = 0
lstat(".git/REVERT_HEAD", {st_mode=S_IFREG|0644, st_size=41, ...}) = 0
openat(AT_FDCWD, ".git/REVERT_HEAD", O_RDONLY) = 4

Але результат видається таким же: вони відкривають редактор з git-generated message (напр .: "Це повертає commit [...]") і здійснити після виїжджаючи Я використовував альтернативну форму кілька разів і ніколи не мав жодного принаймні проблеми (до речі, я, напевно, виявив його під тим самим сценарій)


1
2017-08-04 02:45