2013-11-08 2 views
2

Рассмотрим следующий сценарий:Как работать с двумя РЕПО Git, один полный, другой частичный

Remote repo A (master): 
    dir 1 
    dir 2 
    file 1 
    file 2 

Remote repo B (branch): 
    dir 1 
    file 1 

То, что я хотел бы сделать, это сохранить общие файлы в двух операции РЕПО в синхронизации. Когда я тяну, я хочу получить все изменения с Repo B и только изменяется из обычных файлов с Repo A. Аналогично, когда я нажимаю, я хочу, чтобы локальные изменения публиковались только в общих файлах в обоих репозиториях. Файлы, которые существуют в репо A, но не в репо B, не должны оставаться без изменений.

Поддерживает ли Git это?

+0

«Что бы я хотел сделать, это сохранить общие файлы в двух репозиториях в синхронизации», вы можете попробовать это с помощью «подмодуля» создать новый репо C, в котором хранится общий файл, и пусть репо A и B относятся к C как подмодуль – dekdev

ответ

1

После нескольких часов исследований я решил пойти с слиянием джиттов. Not git subtree, который является инструментом git contrib (говорить о перегрузке жаргона), но стратегия Git - Subtree Merging. Причины моего решения заключаются в следующем:

  1. Веб полон предупреждений против использования подмодуля git. Что еще более важно, для меня абсолютно необходимо сохранить физические копии общих файлов в обоих репозиториях, а не просто указатель на удаленное репо. Я также хочу, чтобы возможность обновлять код из основного или поддерева, который также не предлагает субмодуль. Так что git-подмодуль отсутствует.

  2. Инструмент поддерева git выглядит красиво и имеет много подписчиков, но при закрытом осмотре он, похоже, очень похож на стратегию слияния поддерева (на самом деле кто-то сказал, что это хороший декоратор вокруг слияния поддерева). В нем есть несколько дополнительных функций, таких как способность выдавливать историю поддерева при слиянии, но это связано с тем, что вы узнаете новый метод для ввода кода. Кроме того, он еще не является частью стандартного git-бинарного файла (Git 10.8.4.2 на Mac, предварительно созданный двоичный файл), и я не хочу вручную устанавливать обновление каждый раз, когда исправляется ошибка.

Спасибо тем, кто нашел время ответить на мой вопрос, особенно @dekdev, который также пытался помочь мне в чате.

0

Это отдельные команды.
Пользователям B не нужно иметь доступ к моему репо C, которые им понадобятся, если я создам подмодуль.
Аналогичным образом пользователи A не должны иметь доступ к B.
Тот факт, что код является общим для двух отдельных репозиториев, должен быть прозрачным для текущих пользователей репозиториев. Они могут работать на своих индивидуальных репозиториях, но не на обоих.

Тогда вам нужно какой-то автоматический крюк, который:

  • для каждой фиксации на A или B проверки какие общие файлы
  • толчок обновления для этих общих файлов соответственно к другому Сделки рЕПО

Это предполагает, что:

  • у вас есть доступ к A и B серверов (где TeamA и TeamB подталкивают к)
  • можно развернуть там post-receive крючок
  • , что крючок может подтолкнуть к серверу с другого репо (который может быть легко, если мы говоря о том же сервере).

Примечание: для того, чтобы защитить доступ к обеим сделкам РЕПО (или даже файлы внутри репо), и authorization layer как gitolite может помочь.

+0

Я решил пойти с слиянием джиттов git, см. Мой ответ выше. –

+0

@AbhijitSarkar ok. Выглядит неплохо. +1 – VonC