Git: как работать с несколькими репозиториями? - PullRequest
3 голосов
/ 26 июня 2010

У меня есть удаленный репозиторий git, доступный только для чтения A, который я клонировал в своей локальной файловой системе. A периодически обновляется, и я вытягиваю и объединяю обновленный код в своей системе после каждого обновления.

Я хочу сотрудничать с членами моей команды в файлах A, для которых я создал новый удаленный репозиторий B.

Как мне синхронизировать B с моим локальным репозиторием? Я хотел бы узнать правильную последовательность команд и параметры конфигурации для достижения моих целей. Вот сценарии, которые я хотел бы решить: 1. Потяните от A после того, как появятся обновления, нажмите на B. 2. Вытащите из A, объедините его с моими локальными файлами, затем нажмите его в B, объединяя с репо на B. 3. Я бы хотел, чтобы все A, мой локальный репо и B имели одинаковые ветви.

Буду благодарен за любую помощь. Если мой вопрос не очень ясен, пожалуйста, укажите его, и я постараюсь его отредактировать. Спасибо.

Ответы [ 3 ]

2 голосов
/ 27 июня 2010

вы можете попробовать

URL-адрес репозитория git ...
Удаленное добавление git-репоА URL-адрес-репо-А
репозиторий git pull

1)

git pull repoA
git push repoB

2)

git pull repoA
git checkout local-granch-to-merge
git merge repoA / remote-branch-to-merge
git push repoB

3) Я не уверен, есть ли какой-нибудь трюк для проверки всехпереходы от repoA к repoB или локальному репо только одной командой ... если ее нет, вы всегда можете сделать это вручную с помощью

git checkout --track -b branch1 repoA / branch1

и когда вы нажимаете, они должны нажать на соответствующую ветку в удаленном

1 голос
/ 29 июня 2010

Я предполагаю, что у вас есть два пульта с именами A и B, для которых настроен только URL.Если вы не следуете ссылочным спецификациям, прочитайте соответствующую главу в книге ProGit.

1: извлеките из A после того, как появятся обновления, переведите его в B

$ # pull = fetch + (often fast-forward merge)
$ git fetch A # fetches all objects from A (all branches, commits; everything)
$ git push B 'refs/remotes/A/*:refs/heads/*'
$ # I've quoted so that the shell doesn't try to expand the *

РЕДАКТИРОВАТЬ: Я предположил, что вы не хотите объединять изменения в ваши локальные ветви.

2: Извлечь из A, объединить его с моими локальными файлами, а затем нажмите егона B, сливаясь с репо на B.

$ git pull A # fetch + attempt to merge changes in all branches
$ # Resolve any conflicts here
$ git push B '+refs/heads/*:refs/heads/*' # omit the + if it's a FF push
$ # Default is to push matching branches

EDIT: Выше не объединяет изменения в B. Если вы хотите это сделать, вы должны потянутьтакже изменяет B и объединяет их в свои локальные ветви перед нажатием.

3: Я бы хотел, чтобы все A, мое локальное репо и B имели одинаковые ветви

$ git pull A
$ git checkout branchx
$ git reset --hard A/branchx # Warning! All local changes will be destroyed
$ # Repeat the above for all branches
$ git push B '+refs/heads/*:refs/heads/*' # Warning! Data in B is overwritten

РЕДАКТИРОВАТЬ: Если вы хотите удалить устаревшие ветви отслеживания, запустите

$ git remote prune A
$ git remote prune B
0 голосов
/ 26 июня 2010

Я бы предложил настроить cronjob на хосте с B. Таким образом, обновления из репо A извлекаются своевременно (скажем, два раза в час). А вам просто нужно вытащить из B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...