Может ли Git клонировать пустой репозиторий в другой пустой репозиторий - PullRequest
5 голосов
/ 18 июня 2011

Я уверен, что это можно сделать, я просто не уверен в правильности пути.

Мой сценарий заключается в том, чтобы на этом этапе к моему компьютеру были подключены USB-накопитель, локальный жесткий диск и сетевой диск.Локальный жесткий диск будет содержать локальный активный репозиторий для моей локальной работы.Сетевой диск (с длинным UNC-каналом!) Будет содержать основное голое хранилище, которое действует как исходная эталонная копия (2 или 3 сотрудника в офисе), в то время как USB-диск действует как моя мобильная копия для подключения к некоторым внешним ПК через сеть (другие мои сотрудники имеют свои собственные диски, которые могут повлиять на ответы).(это в Windows msysgit).

Именно настройку USB-накопителя и вызывает уверенность, что я направляю рабочий процесс в правильном направлении (см. using-git-on-usb-stick-for-travel-code .

  • Должен ли я клонировать свое локальное репо или клонировать сетевое репо?
  • Каковы специальные флаги дляубедитесь, что USB-накопитель отключается правильно? (-nohardlinks?)
  • и т. д.

Ответы [ 3 ]

8 голосов
/ 19 июня 2011

Вы можете создать клон «от голого к голому» из репозитория с длинным UNC-путем к USB-накопителю с помощью

cd /e/src
git clone --bare //server/path/to/your/network/repo.git

, но я сомневаюсь, что вам это очень понравится, если вы сделаете это за один шаг.

Учитывая, что вы будете работать в своем локальном активном репо, я бы создал голое репо на USB-накопителе

cd git init --bare /e/src/myproject.git

создаю удаленное в вашем локальном активном репо

git remote add usb file:///e/src/myproject.git

, а затем нажмите на него при необходимости.

git push usb philip/cool-new-feature

Приведенные выше команды предполагают, что ваша флешка USB - это E: и ваш рабочий каталог находится в вашем локальном активном репо.

Насколько я понимаю ваш вопрос, у вас есть как минимум два несвязанных набора соавторов, в зависимости от того, имеют ли другие ваши соавторы общий центральный репозиторий или все они работают на изолированных машинах.Это означает, что репозиторий на вашем USB-накопителе - это репозиторий, к которому все (в конечном итоге) имеют доступ, поэтому ваши товарищи по команде проводят большую часть своего времени «в самолете» по отношению к нему.

Предложения по проектированию процесса разработки:

  1. Избегайте ситуаций, когда вы или кто-то другой становитесь назначенным слиянием.Вместо этого вы хотите, чтобы все члены команды интегрировались как можно чаще, чтобы сохранить потенциал конфликтующих изменений небольшим и управляемым.
  2. Наличие разрозненных соавторов повышает риск того, что кто-то нарушит функцию, от которой зависит кто-то другой, либочерез казалось бы безобидные изменения или неправильно разрешающие конфликты слияния.У вас должен быть быстрый метод, позволяющий одним нажатием кнопки определить, проникли ли в ваш код какие-либо регрессии или новые ошибки.
  3. Каждая группа соавторов, , то есть , те, кто имеет более частый доступ крепозитории друг друга или общий репозиторий, чем на USB-накопитель, должны практиковать непрерывную интеграцию между собой.Когда будут доступны новые коммиты с USB-накопителя, интеграция того, что у них есть, с новым кодом от остальной части команды должна стать наивысшим приоритетом.

Один из способов сделать это - заставить всех поддерживать чистотуосваивать и вносить изменения только в другие филиалы.Физическое владение USB-накопителем является естественным токеном интеграции, поэтому, когда он есть у данного соавтора, последовательность выглядит следующим образом:

git checkout master
git pull usb master     # should always be a fast-forward
git merge feature1
make test               # or whatever, and repeat until no breakage
git commit
git push usb master
git push shared master  # if appropriate
git merge feature2      # if necessary
...
3 голосов
/ 19 июня 2011

Рекомендую создать зеркальный клон вашего основного сетевого репо:

cd /path/to/usb/drive
git clone --mirror url://to/main/network/repo/project.git

Зеркальный клон - это пустой репозиторий со всеми теми же ветками, тегами и т. Д., Что и в оригинальном репозитории.

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

Всякий раз, когда вы хотите обновить USB-зеркало, просто установите его и выполните следующее:

cd /path/to/usb/drive/project.git
git remote update -p

Если вы когда-либо вставите зеркало USB-накопителя, лучший способ получить эти коммиты в основном сетевом репо - через локальный репозиторий жесткого диска:

# initial setup
cd /path/to/local/project
git remote add usb /path/to/usb/drive/project.git

# grab the commits from the usb drive
git remote update -p

# merge the usb drive commits into your local master branch
git merge usb/master

# push the result up to the main network repo
git push
0 голосов
/ 18 июня 2011

Вы можете клонировать от любого. Как только USB-накопитель завершит работу, вы можете удалить его. Вы можете перепроверить целостность после с

git fsck --full
...