2012-01-04 72 views
2

我維護一小組我自己的git倉庫,並且有時會更改存儲「主」倉庫的機器或目錄。不幸的是,這會導致存儲庫的所有工作副本中斷。如何爲Git遠程URL使用環境變量

有沒有辦法在我的本地工作副本的「遠程」路徑中使用環境變量?

如果沒有,是否有一種簡單的方法可以欺騙Git(禁止使用擴展變量的蠻力sh腳本,在推送之前移除並將其重新分配給遠程位置等)擴展變量?

+0

你是什麼意思''遠程'我的本地工作副本'路徑? – manojlds 2012-01-04 17:48:19

+0

$ git help remote – 2012-01-04 20:09:00

+0

我同意使用'git remote set-url '是輕鬆重新配置遠程uri的正確方法,但是我繼續並根據環境給出瞭如何更改這些遠程uri的答案。 – James 2012-01-04 21:23:33

回答

7

您可以將配置變量傳遞給通過環境,這會讓你變得棘手,做你想做的事情。這隻有在你沒有設置GIT_CONFIG時纔有效。在你的shell環境的啓動腳本你可以設置類似:

GIT_ORIGIN_REMOTE=git://github.com/gitster/git.git 
GIT_CONFIG_PARAMETERS="'remote.origin.url=${GIT_ORIGIN_REMOTE}'" 

確保您已經移除的.git/config中的遠程源URL配置行。這將導致使用origin遙控器的所有操作與git://github.com/gitster/git.git一起操作。現在,您只需更改啓動環境腳本中的GIT_ORIGIN_REMOTE即可。注意GIT_CONFIG_PARAMETERS的格式,重要的是你的配置選項是單引號的。如果你想多個配置選項,從環境傳遞到Git的跟蹤形式:

GIT_CONFIG_PARAMETERS="'<config_variable>=<value>' '<config_variable>=<value>'" 

你應該能夠使用這些信息來設置如何您認爲合適的環境。我沒有看到這個記錄,只是通過源代碼找到它,所以YMMV取決於你使用的Git版本。 Ref:Git Tokenizing Code & Git Parsing Code

+0

謝謝詹姆斯。這非常巧妙。 – 2012-01-04 21:48:04

+0

+1:正是我在找的東西! – Leo 2012-05-24 15:34:26

1

有趣的問題。所有這些存儲庫是否具有相同的「更改」遠程?如果是這樣,我可以想到一個便宜的伎倆。您可以在/etc/hosts中爲遠程計算機的實際IP添加本地主機名條目,並使所有存儲庫指向本地名稱。更改/etc/hosts中的條目將起作用。我不喜歡它,但它可能工作。

+0

我的回購庫大部分存放在保管箱中,具有工作目錄的計算機可能與保管箱帳戶有關。如果我決定重新組織我的Dropbox帳戶中的一個或兩個父目錄,我希望能夠重置類似GIT_LOCAL_REPOSITORY_ROOT的東西 - 這將與我的本地回購中的遠程地址相關聯。在這種情況下,主機名實際上並沒有改變。 – 2012-01-04 17:51:32

+0

哦,好吧。這將打破我的「解決方案」:) – 2012-01-04 17:52:32

+0

我正在尋找一箇中央的方式來處理我的家庭服務器的變化的網址。而不是搞亂git-config中的變量,這對我來說是更合適的解決方案。謝謝! – meonlol 2016-04-27 20:25:08