Есть ли опасность связывания каталога `.git` для сборки? - PullRequest
1 голос
/ 15 сентября 2011

Я настраиваю обычную среду развертывания git, и мне интересно, безопасно ли устанавливать символическую ссылку на каталог .git? Таким образом, я надеюсь, что мне удастся получить отдельные выписки из одного и того же репо без необходимости иметь локальные копии истории потенциально большого проекта.

Рассуждение (псевдопоток):

  • веб-интерфейс:
    • нажмите «Развернуть этот коммит на этом сервере»
  • Сервер:
    • ln -s ./deploy/.git ./build/.git
    • cd build
    • git fetch
    • git checkout some_commit
    • make
    • в случае успеха:
      • cd ..
      • mv build deploy
      • make deploy // просто сбросить nginx, apache и т. Д.
    • если сбой
      • предупреждение пользователя
      • стереть каталог сборки, без вреда

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Check git-new-workdir, инструмент, специально созданный для проверки нескольких рабочих каталогов из одного каталога .git.

1 голос
/ 15 сентября 2011

Если вы клонируете git-репозиторий локально, каталог .git будет использовать жесткие ссылки.Так что вам не нужно беспокоиться о пространстве, по крайней мере, для только что клонированных репозиториев.

$ du -chs repo/.git
 27M    repo/.git
 27M    total
$ git clone repo repo2
$ du -chs repo2/.git
 27M    repo2/.git
 27M    total
$ du -chs repo/.git repo2/.git
 27M    repo/.git
292K    repo2/.git
 27M    total

Поскольку git кэширует информацию о рабочей копии, я опасаюсь символической ссылки на каталог git.

0 голосов
/ 15 сентября 2011

Безопасная символическая ссылка на каталог .git в ситуации, которую вы описываете.(Если вы использовали git в каталоге с символической ссылкой .git, это может сбить с толку, потому что индекс (или промежуточная область) будет разделен между ними.)

Однако вам не нужночтобы сделать это для того, что вы хотите - вместо этого вы можете запустить git checkout с параметрами --git-dir и --work-tree, чтобы указать git, какой каталог репозитория и рабочее дерево использовать.Например:

mkdir /home/whatever/build/
git --git-dir=/home/foo/deploy/.git --work-tree=/home/foo/build/ checkout -f

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

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