2013-10-02 5 views
0

Я хочу установить промежуточный репозиторий git, и все члены моей команды могут совершить фиксацию и нажать этот репозиторий.Создание промежуточного хранилища git

Когда все члены команды завершают все задачи, все зафиксированные изменения в межсетевом репозитории должны быть доставлены в репозиторий offcial git, расположенный на другом сервере, размещенном в Интернете.

Вопрос, можно ли выполнить эту конфигурацию? а как это сделать?

ответ

1

Возможно.

Вы можете настроить сервер git на одном из компьютеров локальной сети, следуя инструкциям here или с помощью таких инструментов, как Gitolite. После того, как у вас будет готов локальный репозиторий git, вы можете предоставить доступ к членам вашей команды.

Чтобы синхронизировать локальный сервер с центральным сервером, настройте одну локальную копию с двумя пультами. Затем вы можете просто git pull с локального сервера получить локальные изменения и git push на центральный сервер. Вы можете запланировать эту задачу, используя ключ-пара без кода доступа для доступа к обоим серверам.

Более подробная информация о настройке нескольких пультов GIT является available here

1

Да, вы можете, потому что, как GIT является Distributed Revision Control System. Любой клонированный репозиторий может использоваться как источник (место назначения) других репозиториев.

Допустим, вы хотите сделать хранилище прокси-сервера для «главного» хранилище под названием main.git

git clone --bare path_to_main_repo/main.git path_to_proxy_repo/proxy.git 
git clone path_to_proxy_repo/proxy.git path_to_working_repository/working_repository 

Вы можете нажать из вашего working_repository в proxy и от proxy к вашему main хранилище.

Имейте в виду что при использовании GIT, любой репозиторий может играть роль mainTargeted/прокси/orAnythingElse хранилище.

1

Если я вас правильно понял, вы хотели бы поставить начальные изменения в GIT Repòs A

После того, как какой-то момент достигается (вехи, даты и т.д.) все изменения в операции РЕПО принимаются и применяются к сделкам РЕПО B

Большинство команд разработчиков сделать это с помощью одного РЕПО и ветвление

Однако, можно иметь филиалы, куда вы хотите.

Существует пример на странице человека для git remote команды

EXAMPLES 
    · Add a new remote, fetch, and check out a branch from it 

      $ git remote 
      origin 
      $ git branch -r 
      origin/master 
      $ git remote add linux-nfs git://linux-nfs.org/pub/linux/nfs-2.6.git 
      $ git remote 
      linux-nfs 
      origin 
      $ git fetch 
      * refs/remotes/linux-nfs/master: storing branch 'master' ... 
      commit: bf81b46 
      $ git branch -r 
      origin/master 
      linux-nfs/master 
      $ git checkout -b nfs linux-nfs/master 

Ваш Repos может быть как Linux, NFS в приведенном выше примере.После этого, мерзавец слияние может быть использован, чтобы объединить два

1

Попробуйте использовать чистый репозиторий (http://git-scm.com/book/ch4-2.html)

В принципе, вы intiate новый мерзавец голые репо, как

git init --bare 

Добавить репозиторий в пульт дистанционного управления для каждого из ваших разработчиков с помощью

git add remote upstream_intermediate_bare path/to/bare/repo 

И затем нажать вашу фиксацию к восходящему голому репозиторию с помощью

git push upstream_intermediate_bare branch_name 

Далее в своем официальном мерзавце репо, добавьте еще удаленные

git add remote downstream_intermediate_bare path/to/bare/repo 
git pull downstream_intermediate_bare branch_name 

Голых хранилища имеют важное значение для общего случая удаленного хранилища используется только как толкать и тянуть источник. Проверьте this.

Edit: Пример Пример

cd ~/Desktop/test 
mkdir dev1 
mkdir official 
cd dev1 && git init && touch file && git add . && git commit -m "msg" && cd .. 
cd official && git init && cd .. 
git init --bare interim 
cd dev1 && git remote add upstream_intermediate_bare ../interim && cd .. 
cd official && git remote add downstream_intermediate_bare ../interim && cd .. 
cd dev1 && git push upstream_intermediate_bare master && cd .. 
cd official && git pull downstream_intermediate_bare master && cd .. 

Так с приведенном выше примере, код разработчика находится в директории dev1, он нажимает на голое хранилище внутри, в течение которого вы не можете сделать тянуть или нажмите, вы должны добавить добавить его в свои пульты и действовать на него, и официальное репо просто тянет из голого хранилища.

+0

Когда я пытаюсь использовать этот git add remote upstream_intermediate_bare ~/Desktop/git_local', я получаю следующую ошибку: 'fatal: эта операция должна выполняться в дереве работ – developer

+0

для моего случая, официальный git уже существует в удаленный сервер и нет в моей локальной сети – developer

+0

Как я могу применить ваш пример в моем случае? – developer

1

Предположим работать в проекте. Вы просто вытащить код из мастера, и открыть новый филиал:

git pull origin master 
git checkout -b new-branch 
... 

Теперь вы можете нажать вашу ветку или просто начать работать в ней, прежде чем толкать некоторые фиксации.

... 
git add . 
git commit -am 'I am pushing in bew-branch' 
... 
git add . 
git commit -am 'I am pushing in bew-branch' 
... 

У вас есть некоторые функции в вашей отрасли (нет в мастере) Вы первый разработчик, который имеет рабочий в этой отрасли так, ... Вы можете нажать ее происхождение.

... 
git push origin new-branch 
... 

Теперь существует ветка, называемая «origin/new-branch», и все разработчики могут вытащить ее из этой ветки. Теперь вы продолжаете совершать в вашей locasl отрасли:

... 
git add . 
git commit -am 'I am pushing in bew-branch' 
... 
git add . 
git commit -am 'I am pushing in bew-branch' 
... 

Другой разработчик толкнул какой-то код, и теперь вам нужно тянуть

... 
git pull origin master 
... 
    Fix merge 
... 
git push origin new-branch 
... 

И, наконец, вы можете поместить все совершить в мастер

... 
git checkout master 
git merge new-branch 
git push origin master 

Конец.

Смежные вопросы