Эффективное резервное копирование множества версий репозитория git с использованием пространства имен ветвей.

StackOverflow https://stackoverflow.com/questions/3240900

  •  15-09-2020
  •  | 
  •  

Вопрос

На работе мы используем Perforce для контроля версий.С этим есть проблемы:1) с помощью этой централизованной модели мы не можем регистрировать изменения, пока они не будут готовы к регрессии.Это означает, что у нас нет контроля версий в процессе разработки.2) Мы не делаем резервную копию представления клиента о депо, поэтому наша работа небезопасна, пока мы не сможем его проверить.3) У нас есть проблемы с обменом нашим кодом с каждым, если мы не попросим настроить ветку интеграции.Я пытаюсь настроить дополнительный рабочий процесс git для разработчиков, которые хотят использовать git для решения этих проблем.

Планируется использовать git-p4 для взаимодействия с сервером Perforce и создать частное репозиторий git.Это касается 1).Я планирую использовать рабочий процесс менеджера интеграции, описанный в Git Pro (http://progit.org/book/ch5-1.html), чтобы наши разработчики публиковали общедоступные репозитории, позаботившись о 3).

Blessed Repo

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

Я думал о том, чтобы иметь один голый репозиторий git, назовем его omni-backup, что каждый может использовать все свои ветки (и не стесняться предлагать альтернативы).Это позволит использовать эффективное хеширование sha-1 git и гарантировать резервное копирование только уникальных версий каждого файла.Хитрость в том, что все репозитории резервных копий должны быть частью одного репозитория, чтобы обеспечить эффективность использования пространства.

Проблема в том, что два человека с совершенно разными ветками выбрали для своей ветки одно и то же имя.НАПРИМЕР.У Боба есть feature филиал, и у Джейн есть feature ветка, но они предназначены для разных функций.Если Боб перейдет к омни-резервному копированию, Джейн не сможет этого сделать, поскольку это не будет быстрым слиянием.

В идеале я бы хотел, чтобы, когда Боб отправляет свою ветку функций, ветка была переименована в bob-feature на omni-backup удаленный.И когда он извлекает функцию из omni-backup, он возвращается bob-feature.

Кажется, это не так-то просто сделать в git.Похоже, я могу использовать нажимные крючки, описанные в http://www.kernel.org/pub/software/scm/git/docs/git-receive-pack.html хук post-receive для перезаписи имени ссылки сразу после его написания, а затем что-нибудь можно было бы сделать, чтобы повернуть этот процесс вспять на обратном пути, но это кажется хрупким.У кого-нибудь есть идея получше?


редактировать:Для VONC (потому что код отступает в комментариях), ваш путь звучит многообещающе, vonc, но я не вижу, как тот факт, что это выборочная проблема, победит проблемы с имен.Вы предлагаете cronjob, который знает, как переименовать ветку?

типа (действительно грязно):

foreach my $user (@users) {
    my @branches = split(/s/,cat `$LDAPSERVER/$USER/$REPO/.git/refs/heads`);
    foreach my $branch (@branches) {
        system "git fetch $LDAPSERVER/$USER/$REPO/$BRANCH:+$USER$BRANCH"
    }
}
Это было полезно?

Решение

Зачем разработчику настаивать на omni-backup репо?

В целях резервного копирования я бы предпочел зарегистрировать репозиторий другого разработчика как удаленный и выполнить git fetch каждую ночь (с omni-backup сервер) во всех удаленных репозиториях.
Таким образом, сговор с названием ветки невозможен.И более автоматизированный процесс (разработчику не нужно явно помещать что-либо в репозиторий, с которым он/она не работает напрямую, а будет рассматривать только для резервного копирования)

Тогда я бы произвел приятную маленькую git archive снаружи omni-backup и храните его подальше.

Другие советы

Если вы можете заставить разработчиков следовать определенным рекомендациям, git push может сделать это правильно.

Если вы запускаете эту команду:

git push omni-backup feature:bob-feature
.

Если Omni-Backup является удаленным Ref для хранилища, то функция Bob's Flations будет подтолкнуть к Bob-функцию в Omni-Backup.Но если довериться, что для разработчиков нежелательно, переключение направления потока и наличие Omni-Backup, потяните репозитории разработчиков, поскольку VONC предлагает, это лучшее решение

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top