[英]Do you ignore a git submodule in your .gitignore or commit it to your repo?
現在,每次運行git status
時,我都在project_dir/vendor/submodule_one
的項目中添加了一個子模塊,我得到了modified: vendor/submodule_one (new commits)
。
我的問題是處理這個問題的最佳方法是什么? 我是否將vendor/submodule_one
-文件夾添加到我的.gitignore
中,因為我的主項目不需要知道我的子模塊的細節?
或者當我更改並提交對我的子模塊的更改時,我是否還需要在我的主項目中進行提交?
剛剛開始使用子模塊,除了設置它們之外似乎找不到太多信息。
不,您不需要將子模塊添加到.gitignore
:父模塊將從您的子模塊中看到的是gitlink (特殊條目, mode 160000
)。
這意味着:在子模塊中直接進行的任何更改都需要在父目錄中進行提交。
這樣,父目錄就會為子模塊的狀態記錄正確的提交:那個提交就是上面提到的“gitlink”;
您可以在“ git submodule update (true nature of submodules) ”中閱讀有關該政策的更多信息。
子模塊背后的主要思想是基於組件的方法,您可以在特定提交時引用其他存儲庫。 但是,如果您更改了這些子模塊中的任何內容,則還需要更新父存儲庫中的這些引用。
請注意,在 Git 2.13(2017 年第二季度)中,雖然不忽略 gitlink,但您仍然可以忽略子模塊:
git config submodule.<name>.active false
在“忽略 git 子模塊的新提交”中查看更多信息。
注意:對於 Git 2.15.x/2.16(2018 年第一季度),忽略子模塊更准確。
“ git status --ignored --untracked
”並沒有停留在一個單獨項目的工作樹上,該項目嵌入在一個被忽略的目錄中,並在該其他項目中列出了文件,而不僅僅是將目錄本身顯示為被忽略。
請參閱Johannes Schindelin ( dscho
) 提交的 fadb482 (2017 年 10 月 25 日) 。
(由Junio C gitster
合並-- gitster
-- in commit da7996a ,2017 年 11 月 6 日)
status
:不要被排除目錄中的子模塊混淆我們
treat_directory()
地將exclude
標志傳遞給treat_directory()
函數,以便我們可以在treat_directory()
指示其中的文件被排除而不是未跟蹤。但是我們還沒有以同樣的方式對待子模塊。
因此,
git status --ignored --untracked
with a submodulesubmodule
in a gitignoredtracked/
將在“Untracked files
”部分顯示子模塊,例如
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
相反,我們希望它在“
Ignored files
”部分顯示子模塊:
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
出於某種原因submodule.module-name.active對我不起作用。
這就是為什么我使用submodule.module-name.ignore
git config submodule.<your module path>.ignore all
https://git-scm.com/docs/gitmodules - 在這里您可以找到參數可能值的描述
適用於(新提交)和(修改內容)消息。
要添加到已接受的答案中,我發現將 Git 子模塊文件夾添加到 .gitignore 實際上會導致問題 - 特別是在嘗試創建項目的新克隆時。 具體來說,運行正常的子模塊克隆命令會導致子模塊文件夾為空:
git submodule init
git submodule update
git pull --recurse-submodules
只能通過嘗試重新運行
git submodule add <Git repo> <submodule folder>
根據輸出,問題很明顯:
The following path is ignored by one of your .gitignore files:
<submodule folder>
Use -f if you really want to add it.
我沒有添加-f
,而是從 .gitignore 中刪除了 Git 子模塊文件夾並重新運行子模塊克隆命令 - 現在成功創建了該文件夾。 我認為可能存在一個錯誤,即其中一個子模塊克隆命令尊重 .gitignore 但沒有警告它相應地跳過子模塊。
git config submodule.<name>.ignroe all
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.