2016-11-13 42 views
3

在主repo中,還有另一個repo(可能是從github下載的,也就是說),我把它稱爲sub-repo。將sub-repo內容推到一起(不使用git submodules)

我不想使用git submodules功能。

子回購可能會被提交併最終推送到他自己的遠程。但我想繼續在主要的回購工作,忽略該文件夾(子回購)實際上是一個git回購。但我想跟蹤主回購的子回購內容(我正在研究後果here)。

我在這個努力中取得了成功,直到我推主要回購承諾的時候,我發現子回購內容沒有推到一起。儘管我在提交時添加了它。

使用git ls-files,我看到文件夾(子回購)在那裏,但文件沒有列出,所以我不確定子回購內容是acctualy跟蹤主回購。

使用git ls-tree --full-tree -r HEAD,我看到sub-repo被稱爲commit,而不是blob,就像main-repo的其他文件一樣。

是否可以將子回購內容推到一起?

+0

要添加sub-repo,我使用'git add sub-repo/*'而不是'git add sub-repo'。現在'git ls-tree --full-tree -r HEAD'顯示子回購文件在那裏。 – KcFnMi

回答

2

我想和子文件回購可與主回購推。下面的步驟可以refered:

  1. 的Git的bash在當地主要回購
  2. 使用git clone <URL for sub-repo>克隆在主回購次回購
  3. 使用git status,你會發現一個未經跟蹤的文件夾,子回購,然後用git add sub-repo/git commit跟蹤
  4. 添加文件,如/main-repo/sub-repo目錄
  5. 使用git add sub-repo/new.txtgit commit new.txt(注意:它在/main-repo目錄中運行)
  6. 使用git push推送到遠程main-repo,並且您還可以在其中找到文件new.txt。你也可以使用git ls-files找到該文件

注意:你可能已經注意到,該模式是16萬,如果我們使用git add sub-repogit commit和模式是100644,如果我們使用git add sub-repo/git commit。 1600000是Gitlink,它表示您將提交記錄爲目錄條目而不是子目錄或文件,有點像子模塊。 100644表示常規的不可執行文件。所以你可以把sub-repo當成一個文件夾。

+0

使用'git ls-tree --full-tree -r HEAD'你能否確認sub-repo被添加爲blob而不是'commit'?我想知道哪些決定因素會發生。你有沒有注意到'git add sub-repo /'和'git add sub-repo'之間的區別? – KcFnMi

+1

是的,新文件的類型是blob,並存在於main-repo中。您可能已經注意到,如果我們使用'git add sub-repo'和'git commit',模式爲160000,如果我們使用'git add sub-repo /'和'git commit',模式100644。 1600000是Gitlink,它意味着您將提交記錄爲目錄而不是子目錄或文件,有點像子模塊。 100644表示常規的非可執行文件。所以你可以把sub-repo當成一個文件夾。 –

+0

請在回答時附上參考1600000/100644的東西。 – KcFnMi

1

主回購子回購跟蹤在主回購?即,當你在運行git的命令主回購目錄,你是做git add的文件既主回購並向子回購

如果是,那麼在主回購你做git commit跟蹤兩個主回購子回購。而git commit後必須做git push主回購發送主回購次回購主回購上游。這樣您就可以跟蹤主回購子回購主回購上游。

但是,這不會自動跟蹤子回購與其上游的子回購。你必須明確地做cd sub-repo然後git addgit commitgit push子回購子回購上游追蹤子回購

爲了更好地瞭解,我建議使用Visual Git Tool作爲Smartgit。

  1. http://www.syntevo.com/smartgit/

+0

感謝將Visual Git Tool作爲Smartgit。但解決方案的本質是添加文件,而不是子回購。我在上面的評論中提到過,可能不是更好的解決方案。 – KcFnMi

+0

不客氣。但是它不會像git子模塊那樣添加'sub-repo'。每次我提到* sub-repo *時,我都指的是它們中的所有文件或只是一些文件。要添加一個子模塊,你需要執行另一個命令'git submodule init'。你的** main-repo **不知道* sub-repo *是另一個'git-repository',它認爲它只是一些文件中的另一個文件夾。只有在將* sub-repo *中的第一個文件添加到** main-repo **並使用'git add sub-repo/first_file.txt'後,它纔會像這樣工作。 – user

+0

我在您的個人資料中看到了'sublimetext'標籤,我可以要求對http://stackoverflow.com/questions/40594295/sublime-text-mysql-build-variable-substitution-issue發表評論嗎? – KcFnMi