Git вопросы планирования репо - PullRequest
2 голосов
/ 27 апреля 2010

На работе разработка использует Perforce для управления совместным использованием кода. Я не буду говорить «контроль версий», потому что мы не можем проверять изменения, пока они не будут готовы к регрессионному тестированию. Для того, чтобы мои личные наборы изменений были под контролем ревизий, я получил разрешение на создание своего собственного git и инициализацию клиентского представления хранилища Perforce как git-репо.

Однако в этом есть некоторые трудности.

  1. Представление клиента находится в подпапке ~, (~/p4), и я хочу также поставить ~ под контроль версий, с отдельной историей. Я не могу понять, как хранить историю для ~ отдельно от ~/p4 без использования подмодуля. Проблема с подмодулем заключается в том, что, похоже, мне нужно создать репозиторий, который станет подмодулем, а затем git submodule add <repo> <path>. Но делать репозиторий подмодуля негде, кроме ~. Кажется, нет безопасного места для создания начального клиентского представления депо с помощью клона git p4.

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

    edit: Достаточно ли просто игнорировать ~/p4 в репо с корнем в ~, чтобы позволить мне начать вложенное репо в ~/p4? Моя функция __git_ps1 по-прежнему считает, что я нахожусь в репозитории git, когда посещаю игнорированный подкаталог репозитория git, поэтому я склонен думать, что нет.

  2. Мне нужно, чтобы «удаленный» репозиторий, созданный git p4 sync, был веткой в ​​~ / p4. Мы должны хранить весь наш код в ~ / p4, чтобы он не создавал резервные копии. Можно ли вытащить из "удаленной" ветки, которая действительно является локальной веткой?

  3. Это просто для удобства, но я подумал, что могу кое-что узнать, спросив об этом. Для 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 ...

1 Ответ

2 голосов
/ 27 апреля 2010

В ответе на вопрос № 1, если вы действительно хотите иметь весь свой домашний каталог в репозитории git, но иметь ~ / p4 в отдельном репозитории, просто добавьте «p4» к .git_ignore в своем домашнем каталоге и еще один репо в p4:

$ cd ~
$ git init
$ echo "p4" > .git_ignore
$ git add .git_ignore
# add all files/directories except p4
$ git commit
$ cd p4
$ git init
$ git add .
$ git commit

Я не совсем слежу за # 2, но да, вы можете взять «удаленное» репо, локальное для вашей файловой системы. Что касается "вытягивания" из местных отделений, это не вытягивание; вытягивание включает в себя выборку и слияние. Если вы пропустите выборку, это просто слияние, так что вы действительно говорите о слиянии из локальной ветки.

...