Правильно ли это поведение git для «git add» с подпапками? - PullRequest
6 голосов
/ 10 ноября 2010

При использовании «git add» с шаблоном файла он только рекурсивно добавляет неотслеживаемые файлы и игнорирует измененные, если они не находятся в текущей папке.

Пример:

$ git status
# On branch master
# Changed but not updated:
#    (use "git add <file>..." to update what will be committed)
#    (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:    level1/test1.txt
#       modified:    level1/level2/test1.txt
#
# Untracked files:
#   (use "git add <file>..." to incldude in what will be committed)
# 
#       level1/test2.txt
#       level1/level2/test2.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git add level1\*.txt
$ git status
# On branch master
# Changes to be committed:
#       new file:   level1/level2/test2.txt
#       new file:   level1/test2.txt
#
# Changed but not updated:
#       modified:   level1/level2/test1.txt
#       modified:   level1/test1.txt
#

После выполнения git add level1\*.txt добавляются неотслеживаемые (test2.txt) файлы, но не измененные (test1.txt) файлы.Я пробовал с опцией -u, экранировать и не экранировать звездочку и т. Д., Но, кажется, ничто просто не может добавить ВСЕ файлы, соответствующие шаблону, независимо от того, отслеживаются они или нет.Например, я мог бы просто добавить все файлы с -A, но имейте в виду, что это только для цели этого вопроса, в действительности будет больше файлов, и я не хотел бы добавлять их все, и иерархия состоит из нескольких папокГлубже.Единственный способ добавить отслеживаемые файлы - обратиться к указанию или записи всего шаблона, кроме имени файла, например: git add level1**.txt ИЛИ git add level1/level2/*.txt.

В документации git add: здесь он говорит, что шаблон файла должен работать рекурсивно и ничего не говорит о отслеживаемых или неотслеживаемых файлах, и даже приводит и пример.

Я использую msysgit, но я проверилна всякий случай в Windows и Linux.

Я просто хочу знать.Правильно ли я истолковываю документацию (потому что я думаю, что на основе документов это должно работать) или это так?Это просто не имеет смысла для меня.

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Хорошо, на этот вопрос также может быть ответ.

Нет, это не совсем правильное поведение. git add <filepattern> должно быть эквивалентно git add file1 file2..., где это файлы, соответствующие шаблону - и это не то, что здесь происходит.

0 голосов
/ 11 ноября 2010

Это потому, что вы используете

git add level1\*.txt

Отмечает обратную косую черту \ . Это равно

git add 'level1*.txt'

Чтобы получить ожидаемое поведение, используйте косую черту / .

Если вы просто хотите добавить все файлы, используйте git add -A .

...