Вы можете создать свой репозиторий Git с помощью:
- рабочее дерево является текущим путем на локальном разделе диска
- но
.git
dir задается с помощью переменной окружения --git-dir=<path>
или $GIT_DIR
и ссылается на путь в вашем (резервном) домашнем каталоге.
Команда git init
учитывает переменную среды $GIT_DIR
:
Если установлена переменная окружения $GIT_DIR
, то она указывает путь, который следует использовать вместо ./.git
для базы репозитория.
Кроме того, вы можете создать репо в своем домашнем каталоге, но добавьте следующее git config
:
core.worktree
Установить путь к корню рабочего дерева.
Это может быть переопределено переменной среды GIT_WORK_TREE
и параметром командной строки --work-tree
.
Это может быть абсолютный или относительный путь к каталогу .git
, либо указанный в --git-dir
или GIT_DIR
, либо обнаруженный автоматически.
Если указаны --git-dir
или GIT_DIR
, но не указано ни одного из --work-tree
, GIT_WORK_TREE
и core.worktree
, текущий рабочий каталог считается корнем рабочего дерева.
Обратите внимание, что эта переменная учитывается, даже если она задана в файле конфигурации в подкаталоге ".git
" каталога, и ее значение отличается от последнего каталога (например, для "/path/to/.git/config
" core.worktree
установлено значение " /different/path
"), что, скорее всего, является неправильной конфигурацией.
Выполнение команд git в каталоге "/path/to
" все равно будет использовать "/different/path
" в качестве корня рабочего дерева и может привести к путанице среди пользователей.
ОП добавляет:
Может ли это быть так же просто, как создать символическую ссылку .git в локальном разделе на каталог .git в удаленном разделе NFS?
По крайней мере, с настройками (например, git-dir
или core.worktree
), которые позволяют достичь того же эффекта, не полагаясь на специфические функции ОС, такие как символическая ссылка (которая доступна не на всех OS)
Обновление 2018 (8 лет спустя): Том Рассел добавляет в комментарии :
Похоже, что флаг --separate-git-dir
теперь используется для указания .git/
на сервере NFS при инициализации хранилища на локальной рабочей станции (клиент NFS).
Последующее поведение, однако, странно: изменения, зафиксированные на клиенте NFS, не распространяются на сервер автоматически, что требует git checkout -- <file>
на сервере.
Впоследствии я выяснил, что git reset --hard
в репо сервера после коммита в репо клиента (или наоборот) является самым простым способом обновления рабочего каталога.