有沒有一種方法可以自動git submodule update
(或最好git submodule update --init
每當git pull
做叫什麼名字?有沒有辦法讓git pull自動更新子模塊?
尋找一個混帳配置設置,或一個git的別名,以幫助這一點。
有沒有一種方法可以自動git submodule update
(或最好git submodule update --init
每當git pull
做叫什麼名字?有沒有辦法讓git pull自動更新子模塊?
尋找一個混帳配置設置,或一個git的別名,以幫助這一點。
git config --global alias.pullall '!git pull && git submodule update --init --recursive'
如果你想參數傳遞給git pull,然後用這個代替:
git config --global alias.pullall '!f(){ git pull "[email protected]" && git submodule update --init --recursive; }; f'
如果你想在你使用的所有git倉庫中使用這個別名,請記得使用「git config --global」 – yoyo 2015-10-08 23:47:32
一個別名,如Kevin巴拉德,是一個非常好的解決方案。只是爲了拋出另一個選項,你也可以使用一個簡單運行git submodule update [--init]
的後合併鉤子。
從Git 1.7.5開始,它應該默認自動更新子模塊,就像你想要的那樣。
[編輯:每評論:新的1.7.5行爲是自動獲取的最新提交的子模塊,但不(在git submodule update
意義上)到更新他們。所以這個答案中的信息與背景有關,但並不是完整的答案。您仍然需要一個別名來在一個命令中提取和更新子模塊。]
「按需」的默認行爲是在您獲取更新子模塊提交的提交時更新子模塊,而此提交不是已經位於你的本地克隆中。
您也可以在每次抓取時更新它,或從不(我假設1.7.5之前的行爲)。
用於更改此行爲的配置選項是fetch.recurseSubmodules
。
該選項可以設置爲布爾值,也可以設置爲
on-demand
。
將其設置爲布爾值會將fetch
和pull
的行爲更改爲在設置爲true時無條件遞歸到子模塊中,或者在設置爲false時將其無法遞歸。當設置爲
on-demand
(默認值),fetch
和pull
當其子項目會檢索一個提交,更新子模塊的參考只會遞歸到一個人口稠密的子模塊。
參見:
git config
man page (1.7.5)(或最新git config
man page)git fetch
man page (1.7.5)(或最新git fetch man page)以獲取更多信息。
git fetch --recurse-submodules[=yes|on-demand|no]
小心:如下面的答案所解釋的那樣,這隻會自動獲取更改,您仍然需要執行子模塊更新 - 所以別名的答案是正確的。 – Artem 2011-11-03 16:02:27
@Artem是正確的。這個答案雖然有用,但並不涉及整個問題。這個設置只是執行'git fetch',而不是'git submodule update'。 – 2014-04-26 13:16:49
這個答案具有很高的欺騙性。即使與'git pull'一起使用,而不是'git fetch',這個選項只會使* fetching *遞歸。它根本不會改變在子模塊中籤出的提交。所以'git submodule update'仍然是必需的,正如@Artem所指出的那樣。 – 2015-02-19 10:12:30
您可以爲自動處理子模塊更新的git命令創建別名。將以下內容添加到您的。bashrc
# make git submodules usable
# This overwrites the 'git' command with modifications where necessary, and
# calls the original otherwise
git() {
if [[ [email protected] == clone* ]]; then
gitargs=$(echo "[email protected]" | cut -c6-)
command git clone --recursive $gitargs
elif [[ [email protected] == pull* ]]; then
command git "[email protected]" && git submodule update --init --recursive
elif [[ [email protected] == checkout* ]]; then
command git "[email protected]" && git submodule update --init --recursive
else
command git "[email protected]"
fi
}
而不是git的別名,你可以通過alias命令添加別名來通過git添加別名,或者在你的路徑中創建以git-(git-bettermodule) – idbrii 2016-10-06 17:17:11
我很驚訝沒有人提到使用git hooks來做到這一點!
剛剛任命post-checkout
和post-merge
文件添加到您.git/hooks
目錄的相關信息庫,並把下列每個人:
#!/bin/sh
git submodule update --init --recursive
既然你specfically問一個別名,假設你想擁有這對於許多存儲庫,您可以創建一個別名,將它們添加到存儲庫的.git/hooks
。
開頭的命令有沒有辦法讓這是一個全局設置?還是在檢出存儲庫時自動獲得的一個? – 2016-07-13 09:00:21
git 2.9的最新版本[爲hooks目錄添加了一個名爲'core.hooksPath'的設置](https://github.com/blog/2188-git-2-9-has-been-released# git-tidbits-gitbits-tidgits),更多詳細信息請參閱「git-config」的文檔。 – taleinat 2016-07-13 16:29:53
至於退房時自動收到的東西,我搜索了但沒有找到任何類型的東西。一位消息來源提到,這故意不支持安全問題,因爲它可以很容易地用於在客戶機上運行任意代碼。 – taleinat 2016-07-13 16:32:35
相關:http://stackoverflow.com/questions/1899792/why-is-git-submodule-update-not-automatic – philfreo 2011-01-06 03:40:26
爲什麼git別名比shell別名更可取? – wnoise 2011-01-06 03:57:09
git別名很好,因爲它將命令封裝在「git」命名空間中。你可能會問,爲什麼所有的git命令都以「git」開頭,而不是自己的名字。 – 2011-01-06 04:00:04