簡體   English   中英

如何建立多層次的git工作流程

[英]how to set up a multi-level git workflow

我們正在從svn過渡到git的過程中,動機之一是在我們的一個遠程辦公室中建立本地緩存存儲庫,以便那里的開發人員無需從主存儲庫中進行推送和拉出整個時間都是緩慢的網絡。

因此,基本過程是localCache將定期從主存儲庫中獲取數據,而開發人員將從localCache中獲取數據。 開發人員隨后將推送到localCache,完成功能后,會將其從localCache推送到main。

localCache配置為--mirror

這似乎工作正常,除了當我想從localCache推送更改時,當同一分支上的main也有更改時。 如果我在推送之前從main獲取,那么main的分支將覆蓋開發人員剛剛推送的內容; 如果我在提取之前推送到main,則localCache的分支會覆蓋main。 在這兩種情況下,即使我未指定--force,git也會給我“強制更新”消息。

這使我認為我正在以錯誤的方式進行操作。 我敢肯定,這是git應該擅長的事情,但是對我來說,這似乎並不順利。 在git書的“分布式工作流”部分中,他們描述的所有工作流都讓開發人員總是從“主要”撤出,但這正是我要避免的事情。

聽起來像您想要所謂的“三角工作流程”。 注意:這並不是您所要的,但是我在實踐中已經很好地工作了。 它運作良好的原因是,推送操作往往很少而且很少,而克隆和獲取操作則很頻繁而且頻繁。

這是一個三角工作流的示例,假定您使用的是Git 2.0或更高版本,並且使用ssh身份驗證:

$ git clone ssh://localoffice.company.com/repos/project
$ cd project
$ git remote add hq ssh://companyhq.company.com/repos/project
$ git config remote.pushdefault hq

現在,當我在project工作時,每個git fetch都會從localoffice.company.com/repos/project獲取,而git push localoffice.company.com/repos/project推送到companyhq.company.com/repos/project 詳細信息如下。


三角工作流程,如圖所示:

definitive-source
      /    ^
     /      \
    v        \
 cache ---> work

緩存是您的本地鏡像,確定源是更新緩存的主服務器。 保持本地緩存“充分更新”而又不會給網絡造成很大壓力(通常是具有慢速鏈接的VPN),這是一個小麻煩。

從Git版本1.8.3開始,Git通過配置變量remote.pushDefaultbranch. branch .pushDefault支持“即開即用”的三角工作流branch. branch .pushDefault branch. branch .pushDefault 這確實需要由每個工作人員或代表每個工作人員進行一些配置:他們必須從緩存進行git clone ,以便其origin URL指向緩存鏡像,但將推送配置為轉到另一個遠程站點,並因此,URL是不同的(通過默認的遠程推送或每個分支的URL)。

(然后,他們必須在不命名遙控器的情況下進行推送,或者,如果他們確實命名了遙控器,則必須命名權威來源。)

(在上一份工作中,很久以前(甚至在Git版本1.8之前,我就已經建立了本地鏡像以通過git://協議提供服務,但是所有推送都通過ssh:// 。我們有一些自定義包裝器腳本執行了所有這些操作,而不是使用當時不存在的這些配置變量。)

暫無
暫無

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

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