簡體   English   中英

創建一個中間的git倉庫

[英]create an intermediary git repository

我想安裝一個臨時的git存儲庫,我所有的團隊成員都可以提交並推送到該存儲庫中。

當所有團隊成員完成所有任務后,必須將臨時存儲庫中所有已提交的更改交付到位於Internet上托管的另一台服務器上的正式git存儲庫中。

我的問題是,可以進行此配置嗎? 以及如何做?

有可能的。

您可以按照此處的教程或使用Gitolite之類的工具,在一台LAN計算機中設置git服務器。 准備好本地git存儲庫后,就可以向您的團隊成員授予訪問權限。

要將本地服務器同步到中央服務器,請設置一個帶有兩個遙控器的本地副本。 然后,您可以簡單地從本地服務器進行git pull來獲取本地更改,然后git push到中央服務器。 您可以使用無密碼密鑰對來訪問兩個服務器,從而調度此任務。

有關設置多個git遙控器的更多詳細信息, 請參見此處

是的,您可以,因為GIT是一個分布式修訂控制系統 任何克隆的存儲庫都可以用作其他存儲庫的來源(目標)。

假設您要為名為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 / proxy / orAnythingElse存儲庫的角色。

如果我對您的理解正確,則希望對git repos A進行初始更改

一旦到達某個點(一個里程碑,一個日期等),對存儲庫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

您的存儲庫A可能類似於上述示例中的linux-nfs。 完成此操作后,可以使用git merge將兩者合並

嘗試使用裸倉庫( http://git-scm.com/book/ch4-2.html

基本上,您啟動了一個新的git裸倉庫,例如

git init --bare

使用以下方法為每個開發人員將此存儲庫添加到遠程服務器

git add remote upstream_intermediate_bare path/to/bare/repo

然后使用以下命令將提交推送到上游裸倉庫

git push upstream_intermediate_bare branch_name

接下來,在您的官方git repo中,添加另一個遙控器

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

裸存儲庫對於僅用作推拉源的遠程存儲庫的常見情況很重要。 檢查一下

編輯:示例示例

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中,他將其推送到一個裸倉庫中,在該倉庫中您無法進行拉取或推送,您必須將其添加到遙控器中並對其進行操作,然后官方倉庫只是從裸倉庫中提取。

假設要在項目中工作。 您只需從master提取代碼,然后打開新分支:

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'
...

您的分支機構中有某些功能(master中沒有)。您是該分支機構中第一個擁有工作程序的開發人員,因此,...您可以將其推入原處。

...
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
...

最后,您可以將所有提交放入master

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

結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM