Вам просто нужно убедиться, что хранилище знает, где находится рабочее дерево, и наоборот.
Чтобы сообщить хранилищу, где находится рабочее дерево, установите значение конфигурации 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 и, следовательно, не нужно создавать какие-либо файлы в рабочем каталоге. См. Также Leos answer