2014-03-27 335 views
6

是否可以將帶有.git文件夾的子文件夾添加到回購站點,而不使用Git將其視爲子模塊?我已經嘗試了不同的方法來忽略.git文件夾,但沒有任何工作。忽略子文件夾中的.git文件夾

我在/.gitignore嘗試:

/vendor/**/.git/ 

..和在/vendor/.gitignore:

.git/ 

的git的文件夾,我想忽略在/供應商/富/酒吧/。

+0

git的/是由混帳 –

+0

自動忽略你能弄清楚你是什麼希望?你確定這不是你的Git GUI客戶端錯誤地將'.git'目錄作爲子模塊處理子文件夾嗎?你在使用哪個Git客戶端? –

回答

-1

您是否嘗試過通配符?

**/vendor/.git/ 
+0

是的,請看最新的問題 – Znarkus

0

你的問題吸引了我,所以我試了一下:

$ 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文件中。

+0

我可以說它是一個評論,但我不能詳細說明我用來得出結論的確切步驟。所以在這裏作爲答案 –

+0

你的成績單不符合我的期望和git文檔,我不能自己複製它。你在使用什麼版本的Git?到目前爲止,我已經嘗試了2.16和2.12和2.10。 – jthill

0

雖然它是真的,但.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 
+0

其他語法:'git --git-dir =/path/to/bar/.git status' – VonC

-1

您可以通過直接添加一些做這個(任意)內部內容第一。在搜索新遇到的目錄時,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 
-1

您可以使用混帳掛鉤達到你想要的東西。開箱即用,您可以創建一個預先提交掛鉤,重命名您包含的項目的.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 

My Original answer