Использование каталога, отличного от .git - PullRequest
0 голосов
/ 07 июня 2018

tl; dr: несколько репо друг на друга.Я нуждаюсь в этом по причинам.

У меня есть большой проект, проверенный в Perforce, и мне надоело дурачиться с полками, я не могу записывать экспериментальные ветви без большого ручного труда, и не могувозможность исправлять ошибки в больших кусках кода, которые не могут быть зафиксированы в центральном репозитории индивидуально.

Поэтому, между «официальными» коммитами Perforce, я принял на себя поддержку репозиториев Git внутри одной рабочей области (потому что нашпроцесс сборки идиотски интегрирован с Perforce), который может иметь свои собственные ветви, историю коммитов и т. д.

Проблема, с которой я сталкиваюсь, заключается в том, что из-за ограниченного дискового пространства и ледяной скорости загрузки я частовынужден повторно назначить проверку Perforce для нескольких задач.Это требует переключения между работой в git (без которой вообще невозможно было бы выполнять какую-либо продуктивную работу).Однако, поскольку синхронизация Perforce с git вызывает конфликты слияния, каждая проверка git управляет только небольшим подмножеством файлов, в зависимости от выполняемой задачи.Это создает проблему при массовом игнорировании всех других файлов и поддержании количества управляемых ветвей.

Я бы хотел сохранить несколько независимых .gits на верхнем уровне моей проверки P4 и т. Д.нужно иметь возможность явно указывать имя каталога ".git" и файла ".gitignore" при вызове или через переменную окружения.

К сожалению, из-за того, как git обрабатывает символические ссылки, я не могу сохранитьэти отдельные репо отделяются от проверки P4 без необходимости вручную синхронизировать их назад и вперед, что подвержено ошибкам.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я столкнулся с подобной ситуацией, однако я использую комбинацию рабочих пространств git-p4 и git.

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

0 голосов
/ 08 июня 2018

Существуют переменные окружения GIT_DIR и GIT_WORK_TREE, которые управляют тем, какие команды git для репозитория и рабочего каталога будут влиять.Есть также опции для самой команды git, которые называются --work-tree и --git-dir.

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

alias work_on_foo='export GIT_DIR=mybigproject/.foo.git; export GIT_WORK_TREE=mybigproject'

Или shim , который добавит нужные параметры к команде git:

alias foogit='git --git-dir=mybigproject/.foo.git --work-tree=mybigproject'

Вы можете взглянуть на мой репозиторий dotfiles для примеров обоих методоввключая некоторую дополнительную логику, такую ​​как добавление специальной обработки для некоторых подкоманд git.

Что касается .gitignore, я не думаю, что для этого есть переменная env, но вы можете использовать файл info/exclude (он долженбыть вставленным в .git) для той же цели (он имеет тот же синтаксис, но не является частью данных репозитория, как .gitignore. Или вы можете использовать настройку git config с именем core.excludesfile и установить ее по-другомув каждом .git / config указывать на соответствующий файл.

...