На работе разработка использует Perforce для управления совместным использованием кода. Я не буду говорить «контроль версий», потому что мы не можем проверять изменения, пока они не будут готовы к регрессионному тестированию. Для того, чтобы мои личные наборы изменений были под контролем ревизий, я получил разрешение на создание своего собственного git и инициализацию клиентского представления хранилища Perforce как git-репо.
Однако в этом есть некоторые трудности.
Представление клиента находится в подпапке ~
, (~/p4
), и я хочу также поставить ~
под контроль версий, с отдельной историей. Я не могу понять, как хранить историю для ~
отдельно от ~/p4
без использования подмодуля. Проблема с подмодулем заключается в том, что, похоже, мне нужно создать репозиторий, который станет подмодулем, а затем git submodule add <repo> <path>
. Но делать репозиторий подмодуля негде, кроме ~
. Кажется, нет безопасного места для создания начального клиентского представления депо с помощью клона git p4.
(Я работаю из предположения, что инициация или клонирование репо в подкаталог git-репо не поддерживается. По крайней мере, я не могу найти ничего авторитетного во вложенных репозиториях git.)
edit: Достаточно ли просто игнорировать ~/p4
в репо с корнем в ~
, чтобы позволить мне начать вложенное репо в ~/p4
? Моя функция __git_ps1 по-прежнему считает, что я нахожусь в репозитории git, когда посещаю игнорированный подкаталог репозитория git, поэтому я склонен думать, что нет.
Мне нужно, чтобы «удаленный» репозиторий, созданный git p4 sync, был веткой в ~ / p4. Мы должны хранить весь наш код в ~ / p4, чтобы он не создавал резервные копии. Можно ли вытащить из "удаленной" ветки, которая действительно является локальной веткой?
Это просто для удобства, но я подумал, что могу кое-что узнать, спросив об этом. Для 99% проекта я просто хочу начать с ревизии головы p4 в качестве начального объекта коммита. Для остальных 1% я хотел бы высосать всю историю p4, чтобы я мог просматривать ее в git. Итак, после того, как я закончу инициализацию, начальная фиксация ветки remotes / p4 / master будет содержать:
revision 1 of //depot/prod/Foo/Bar/*
revision X of other files in //depot/prod/*, where X is the head revision
и ветвь remotes/p4/master
содержит Y коммитов, где Y - количество списков изменений, которые имели файл в //depot/prod/Foo/Bar/*
, причем каждый фиксация в истории соответствует одному из этих списков изменений p4, а HEAD выглядит как голова p4.
Редактировать: ответ Мегар не сработал для меня.
Я инициализировал ~ и зарегистрировал несколько коммитов. Я проигнорировал ~ / p4 и ~ / p4 нет ни в одном коммите. =:
[~@ernie02] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.
Затем я пошел в ~ / p4 / prod, ветку, которую я хочу проверить. Но этот репо сломан:
[~/p4/prod@ernie02] (master) $ git log
(shows the log for the repo rooted at ~)
[~/p4/prod@ernie02] (master) $ git init
Initialized empty Git repository in ~/p4/prod/.git/
[~/p4/prod@ernie02] (master) $ git log
fatal: bad default revision 'HEAD'
Редактировать: Ой, я забыл зафиксировать что-то для ~/p4/prod
. Я сейчас пытаюсь синхронизировать git p4 // depot / prod ...