Как создать git-репозиторий в разделе NFS и рабочее дерево в локальном разделе? - PullRequest
8 голосов
/ 06 февраля 2010

Мой домашний каталог находится в удаленно смонтированном разделе NFS на файловом сервере и регулярно резервируется. Я хотел бы, чтобы репозиторий git моего проекта находился в моем домашнем каталоге (для резервного копирования), но я бы хотел, чтобы мое рабочее дерево находилось в разделе локального диска моей рабочей станции (чтобы сборка была быстрой). Локальный раздел диска не резервируется.

Есть идеи, как это сделать? Я знаю, что могу клонировать NFS-репозиторий и перейти к нему, но это кажется ненужным излишним.

Может ли это быть так же просто, как создать символическую ссылку .git в локальном разделе на каталог .git в удаленном разделе NFS?

Ответы [ 4 ]

7 голосов
/ 06 февраля 2010

Вы можете создать свой репозиторий 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 в репо сервера после коммита в репо клиента (или наоборот) является самым простым способом обновления рабочего каталога.

4 голосов
/ 06 февраля 2010

Создайте репо в своем домашнем каталоге, как обычно, затем на своем быстром локальном диске используйте скрипт git-new-workdir (на моей коробке под /usr/share/doc/git-core/contrib/workdir). Это не часть ядра git; это готовый скрипт, но пакет git вашего дистрибутива, возможно, установил его. Использование:

git-new-workdir <repository> <new_workdir>

Это создаст новый отдельный рабочий каталог, связанный с вашим исходным хранилищем.

3 голосов
/ 12 февраля 2011

Вы можете переместить свой каталог .git в удаленный общий ресурс, а затем заменить его на файл с именем «.git», содержащий «gitdir:». Это задокументировано на странице справки по макету хранилища (например, git help repository-layout).

0 голосов
/ 06 февраля 2010

Не уверен, что вы подразумеваете под избыточным убийством, но я бы предложил сделать клон в NFS и подтолкнуть к нему.

Вы можете установить хук после фиксации, который выполняет git push --mirror my-nfs-thing, и вам даже не нужно об этом думать.

Самое главное, у вас всегда будет быстрый и надежный доступ к данным репозитория (без страха потери данных из-за сбоев системы и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...