2015-01-27 3 views
2

У меня проблема с git add ., если не удается добавить файлы. Я считаю (на самом деле, я уверен) это связано с тем, что мой локальный репозиторий находится в подкаталоге рабочей строки. git add --all работает, но я хотел бы понять, что здесь происходит.'git add.' failed, когда локальное хранилище находится в подкаталоге рабочей строки

В каталоге worktree У меня есть два файла и подкаталог один репозиторий: ignore.txt, do-not-ignore.txt и repo. Внутренний номер worktree/repo - .git. Я установил git config core.worktree '/absolute/path/to/worktree'. Содержание .git/info/exclude является:

* 
    !do-not-ignore.txt 

Когда я бегу git status изнутри worktree/repo я получаю (с обычным сообщением):

../do-not-ignore.txt 

Однако git add . ничего не делает: работает git status после git add . дает мне тот же результат, что и выше. git add --all, с другой стороны, правильно добавляет файл. Если я просто переведу .git от worktree/repo до worktree, все будет работать так, как ожидалось.

Может кто-нибудь, пожалуйста, объяснить (или предоставить ссылку) такое поведение? Благодарю.

+0

У вас есть папка под названием 'worktree', которая не является корневым каталогом вашего проекта ?! Очень вводящее в заблуждение имя ... – Jubobs

+0

@Jubobs Я просто назвал его 'worktree' здесь ради простоты. Видимо, я ошибся;). На самом деле 'worktree''/home/myuser' и '.git' находится в'/home/myuser/control/repository/user/configuration/'. Это репо для управления файлами конфигурации пользователя. Я не хочу размещать его в домашнем каталоге пользователя явно. – lapk

ответ

0

. в git add . не является предметами Git, это оболочка. Это означает «текущий каталог».

Итак, когда вы из git add . из подкаталога, Git (по праву) пытается только добавить что-то из этого подкаталога. Естественно, что все, что находится за пределами этого каталога, не будет включено.

Если вы переходите к истинному корню репозитория (worktree, здесь), я подозреваю, что git add . будет делать то, что вы ожидали от него раньше.

+0

Хмм ... У меня есть git repo в подкаталоге домашнего каталога пользователя, который имеет 'core.worktree =/etc'. И 'sudo git add .' прекрасно работает. Учитывая, что я могу установить 'core.worktree', не означает' .' означает все в рабочей строке, включая скрытые файлы, но исключая исключение ('.gitignore' и такое) _? – lapk

+0

@PetrBudnik, если это так, мне бы хотелось увидеть ссылку на это. '.' почти всегда означает «текущий каталог», и если разработчики Git дали ему другое значение, они бы нуждались в очень хорошей причине. Конечно, стандартное значение соответствует моему опыту Git. http://stackoverflow.com/questions/26042390/git-add-asterisk-vs-git-add-period – Chris

+0

[Этот вопрос] (http://stackoverflow.com/questions/572549/difference-between-git-add -a-and-git-add) имеет хорошее обсуждение, особенно различия между поведениями 1.x и 2.x. Это обсуждает работу на всей рабочей станции (даже если она не находится в стандартном месте, я думаю), но даже здесь '.' Похоже, означает «текущий каталог». – Chris

 Смежные вопросы

  • Нет связанных вопросов^_^