是否可以將帶有.git文件夾的子文件夾添加到回購站點,而不使用Git將其視爲子模塊?我已經嘗試了不同的方法來忽略.git文件夾,但沒有任何工作。忽略子文件夾中的.git文件夾
我在/.gitignore嘗試:
/vendor/**/.git/
..和在/vendor/.gitignore:
.git/
的git的文件夾,我想忽略在/供應商/富/酒吧/。
是否可以將帶有.git文件夾的子文件夾添加到回購站點,而不使用Git將其視爲子模塊?我已經嘗試了不同的方法來忽略.git文件夾,但沒有任何工作。忽略子文件夾中的.git文件夾
我在/.gitignore嘗試:
/vendor/**/.git/
..和在/vendor/.gitignore:
.git/
的git的文件夾,我想忽略在/供應商/富/酒吧/。
你的問題吸引了我,所以我試了一下:
$ cd /tmp
$ git init foo
Initialized empty Git repository in /private/tmp/foo/.git/
$ cd foo
$ git init bar
Initialized empty Git repository in /private/tmp/foo/bar/.git/
$ cd bar
$ echo "this is bar" > bar.txt
$ git add bar.txt
$ git commit -m "initial commit"
[master (root-commit) c9d6507] initial commit
1 file changed, 1 insertion(+)
create mode 100644 bar.txt
$ cd ..
$ pwd
/tmp/foo
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
bar/
nothing added to commit but untracked files present (use "git add" to track)
$ git add bar
$ git commit -m "parent initial commit"
[master (root-commit) b23e106] parent initial commit
1 file changed, 1 insertion(+)
create mode 100644 bar/bar.txt
$ echo "baz" > bar/.git/baz.txt
$ git status
On branch master
nothing to commit, working tree clean
根據您的問題,/tmp/foo
是一個Git倉庫。而關於/tmp/foo
,/tmp/foo/bar
是一個子目錄,它本身有一個.git
目錄。
如您所見,父代foo
存儲庫完全忽略了bar/.git
子目錄,我甚至不需要.gitignore
文件。
Git沒有辦法將包含.git
文件夾的路徑作爲子模塊對待,而沒有將其註冊在.gitmodules
文件中。
我可以說它是一個評論,但我不能詳細說明我用來得出結論的確切步驟。所以在這裏作爲答案 –
你的成績單不符合我的期望和git文檔,我不能自己複製它。你在使用什麼版本的Git?到目前爲止,我已經嘗試了2.16和2.12和2.10。 – jthill
雖然它是真的,但.git
會自動忽略,主回購將把/vendor/foo/bar
視爲gitlink(主要回購索引中的特殊條目),而不是普通文件。
一招就簡單地移動bar/.git
外主要回購:
vendor/foo/bar
將被視爲一個普通的子文件夾,將被添加到主回購如果需要的話。GIT_DIR=/path/to/bar/.git git ...
例如您git
命令:
cd /path/to/main/repo/vendor/foo/bar
GIT_DIR=/path/to/bar/.git git status
GIT_DIR=/path/to/bar/.git git add .
GIT_DIR=/path/to/bar/.git git commit -m "changes to bar"
GIT_DIR=/path/to/bar/.git git push
其他語法:'git --git-dir =/path/to/bar/.git status' – VonC
您可以通過直接添加一些做這個(任意)內部內容第一。在搜索新遇到的目錄時,Git通過遇到.git
條目來檢測子模塊,但是如果您給它一個實際路徑以在該目錄內查找它不會搜索。
所以
git add path/to/some/submodule/file # bypass initial search that detects .git
git add path/to/some/submodule # now git's index has it as ordinary dir
您可以使用混帳掛鉤達到你想要的東西。開箱即用,您可以創建一個預先提交掛鉤,重命名您包含的項目的.git目錄,例如。至 」。git2「,在」.git2「目錄中添加除」.git2「目錄以外的所有文件,全部提交,推送並最終使用提交後掛鉤將模塊中的」.git2「文件夾重命名爲」.git「。
1)創建預提交文件下的.git /鉤/與內容您根回購:
#!/bin/sh
mv "vendor/foo/bar/.git" "vendor/foo/bar/.git2"
git rm --cached vendor/foo/bar
git add vendor/foo/bar/*
git reset vendor/foo/bar/.git2
2)創建提交後下的.git文件/掛鉤/也與內容:
#!/bin/sh
mv "vendor/foo/bar/.git2" "vendor/foo/bar/.git"
3)在你的回購更改文件最後:
git commit -a -m "Commit msg"
git push
git的/是由混帳 –
自動忽略你能弄清楚你是什麼希望?你確定這不是你的Git GUI客戶端錯誤地將'.git'目錄作爲子模塊處理子文件夾嗎?你在使用哪個Git客戶端? –