intend-to-add в Git
607 открытий627 показов
Команда git add выполняется вслепую, но ее можно более или менее проконтролировать, используя опцию --patch. Но к сожалению, она хорошо работает только с изимененными или удаленными файлами, а вот неотслеживаемые ”(англ. untracked — это файлы, отсутствующие в предыдущем коммите)” файлы отображены не будут.
$ echo "Hello, World!" > untracked$ git status --short?? untracked$ git add --patchNo changes.
Это лечится опцией ”’--intend-to-add”’. В соответствии с документацией, эта опция меняет поведение git add следующим образом:
Отмечает только сам факт того, что изменения впоследствии будут учтены. В индексное дерево помещается только путь, без содержимого. Это может быть полезно, к примеру, для отображения неиндексированного содержимого этих файлов при использовании git diff или дальнейшей записи этих изменений с помощью git commit -a.
Это означает, что после выполнения git add --intend-to-add неотслеживаемые файлы будут добавлены в индексное дерево, но без содержимого (т.е. будет указан только путь). Теперь, при запуске git add --patch будут отображаться различия во всех ранее индексированных неотслеживаемых файлах даже с перечислением измененных строк. Это позволяет вам просмотреть весь файл, строка за строкой, прежде, чем индексировать его. Вы можете даже отменить индексирование каких-либо строк, просто удалив их из патча.
$ echo "Hello, World!" > untracked$ git status --short?? untracked$ git add --intent-to-add untracked$ git status --shortAM untracked$ git add --patchdiff --git a/untracked b/untrackedindex e69de29..8ab686e 100644— a/untracked+++ b/untracked@@ -0,0 +1 @@+Hello, World!Stage this hunk [y,n,q,a,d,/,e,?]?
Для удобства, можно в .gitconfig обозначить add --all --intent-to-add, например, за aa и add --patch за ap. И в таком случае для большинства коммитов достаточно будет писать:
$ git aa$ git ap
Или в gitsh:& aa& ap
607 открытий627 показов