Вам просто нужно убедиться, что хранилище знает, где находится дерево работы, и наоборот.
Чтобы сообщить хранилищу, где находится рабочее дерево, задайте значение конфигурации core.worktree
. Чтобы дать рабочему дереву знать, где находится его каталог git, добавьте файл с именем .git (не папка!) И добавьте строку вроде
gitdir: /path/to/repo.git
Начиная с git 1.7.5 команда init изучила дополнительную опцию для этого.
Вы можете инициализировать новый отдельный репозиторий с помощью
git init --separate-git-dir /path/to/repo.git
Это инициализирует репозиторий git в отдельном каталоге и добавит файл .git в текущий каталог, который является рабочим каталогом нового репозитория.
Раньше до 1.7.5 вам приходилось использовать немного другие параметры и добавлять файл .git самостоятельно.
Чтобы инициализировать отдельный репозиторий, следующая команда связывает рабочее дерево с репозиторием:
git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git
Ваш текущий каталог будет рабочим деревом, а git будет использовать хранилище по адресу /path/to/repo.git
. Команда init автоматически установит core.worktree
значение в соответствии с --git-dir
параметром.
Вы могли бы даже добавить псевдоним для этого:
[alias]
initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"
Использовать контроль версий git в рабочем каталоге только для чтения
Обладая знаниями выше, вы даже можете настроить контроль версий git для рабочего каталога, не имея прав на запись. Если вы используете --git-dir
каждую команду git или выполняете каждую команду из репозитория (вместо рабочего каталога), вы можете пропустить файл .git и, следовательно, не нужно создавать какие-либо файлы в рабочем каталоге. Смотрите также ответ Леоса