2011-03-29 68 views
7

我想通過簡單地觸摸一個空的.gitignore文件並提交它,以「空」初始提交開始我的所有git存儲庫。我的理由與this question大致相同。在財政方面,第一次提交(「尾巴」)沒有父提交,所以會發生各種奇怪和意想不到的事情,而這些事情在其他提交時不會發生。在git init之後自動提交一個空的.gitignore文件?

那麼是否有像init-hook這樣的東西,我可以使用它來跟蹤每個git init與touch .gitignore && git commit .gitignore -m "Initial commit"?或者我應該寫我自己的自定義init命令,這樣做?

回答

13

如果您想要在回購中提交,請不要​​使用git init - 它會產生空回購!改爲使用git clone。只需使用您的空gitignore的提交創建一個存儲庫,並在需要此特定僞空存儲庫時克隆該存儲庫。 (你可以,如果你想讓它可在任何地方公開託管它在github。)

另外,在本地機器上,做一個git的別名,你想要的東西:

[alias] 
    myinit = !git init && touch .gitignore && git add .gitignore && git commit -m "empty gitignore" 

請注意,你不能讓與內置命令具有相同名稱的別名。

+0

我應該在'git status&>/dev/null ||'之前加上前綴,這樣如果git repo已經存在於當前目錄中,'myinit'命令將成爲一個no-op。 – 2011-03-30 18:44:21

+0

@Ryan:如果你願意,你可以做類似的事情,但它並不重要 - 現有的repo中的'git init'複製模板(尤其是'* .sample'鉤子)並創建目錄結構(這將是有效的無操作)。如果你做前綴,'git status'不是你想要的 - 除此之外,它很慢。我建議'git rev-parse HEAD&>/dev/null'。只有在'HEAD'指向一個提交的回購中,這個纔會成功 - 即,如果你已經運行'git init',它將會失敗,導致你的其餘步驟發生。 – Cascabel 2011-03-30 20:19:39

+0

哦,你可以發佈,[這裏](http://stackoverflow.com/questions/5491832/how-can-i-check-whether-a-git-repository-has-any-commits-in-it)如此我可以接受它作爲答案嗎? – 2011-03-30 20:44:32

3

當您執行git init時,.git目錄(包含掛鉤)將被初始化爲默認值。因此git init之後沒有掛鉤。一個假設的「post-init」鉤子是無用的,因爲它唯一可以運行的時間就是鉤子目錄被初始化的位置(並且不包含任何活動的鉤子)。

這聽起來像你可能會更好地寫一個自定義命令來做到這一點,因爲鉤子不是合適的解決方案。

+0

是的,我認爲git指的是鉤子不是解決這個問題的正確方法。這就是爲什麼我說*像一個鉤子的東西 - 我只是想在運行'git init'之後觸發自定義行爲的任​​何方式。 – 2011-03-30 18:45:49

3

這不太好,但它會工作。每當你想初始化一個回購時,運行以下兩個命令。

git init 
touch .gitignore 

然後確保Git是跟蹤你的gitignore文件運行:

git add .gitignore 
git commit .gitignore -m "Adding .gitignore" 

根據您如何設置您的回購,你可能會做反正第二兩個命令。