Как сделать git верхнего уровня для отслеживания всех файлов в другом подкаталоге git - PullRequest
9 голосов
/ 25 июня 2010

последовательность команд

mkdir topdir
mkdir another-git-directory
touch fileC
touch fileD
git add.
git commit -m "sub-dir init "
cd ..
touch fileA
touch fileB
git add.
git commit -m" top-dir init "
git ls-files
// теперь мы можем видеть, что fileC и fileD не отслеживаются git верхнего уровня //
git ls-files -o
// это не будет показывать нам fileC и fileD как неотслеживаемые файлы //

мой вопрос: как мы можем сделать "git ls-files -o", чтобы показать неотслеживаемые файлы внутри подкаталога?почему git ведет себя так, как я ожидаю, что git ls-files покажет все неотслеживаемые файлы (даже если они находятся внутри другого подкаталога git)?

Я знаю, что мог бы сделать лучший git для отслеживания файлов подкаталога, используя "git add * /." ... но мне интересно знать, почему для вопроса выше.Спасибо!

структура каталогов

 topdir +  
        +-- .git  
        +-- fileA  
        +-- fileB  
        + another-git-directory +-- .git  
                                +-- fileC  
                                +-- fileD  

обновление (26 июня)

Я нашел эту тему Невозможно отследить файлы в подмодулях Git и этот URL (cn) http://blog.ossxp.com/2010/01/425/, который объясняет, как решить проблему.

решение:

git rm - кеширование другого-git-каталога # без косой черты
git add another-git-directory /.
git commit

'git rm --cached path / to / sub-dir-or-sub-module' скажет верхнему каталогу не обрабатывать подчиненный каталог как подмодуль ... Я думаю,....

1 Ответ

1 голос
/ 25 июня 2010

По умолчанию вложенное репо не отслеживается .
(фактически оно отслеживает корневую папку субмодуля как gitlink , в специальной записи виндекс )
Git обнаружит вложенное .git репо, а родительское репо делегирует любой статус файла вложенному.

Чтобы показать их отслеженные, вам может потребоваться:

  • удалить gitlink: git rm --cached mysubmodule.
    Обратите внимание на отсутствие косой черты: mysubmodule представляет gitlink, а mysubmodule/ - папка, созданная извлеченным подмодулем.
  • добавить его обратно в индекс родительского репо: git add mysubmodule (здесь вы можете добавить или не добавить косую черту, это не имеет значения)
  • зафиксировать новые файлы, добавленные и представленные в mysubmodule.
...