2017-08-29 12 views
1

我使用git submodule add <GitHubURL.git>將項目作爲子模塊添加到主「父」項目存儲庫。子模塊項目不存在於`git子模塊狀態`名單中,無法作爲單個對象從父項提交

Parent_Project_repo 
- SubA_repo 
- SubB_repo 
- SubC_repo 
- Sub_Problem_Child_repo 

正如我在子模塊的工作,我做Sub*_repo項目內提交(每往常一樣,無論提交的文件我已經在工作)。然而,在父項目中,通常我只是對所有子模塊提交進行一次提交。這種單一提交子模塊的一般顯示出來,像這樣在Parent_Project_repo

enter image description here

我最近從父貯藏庫,增加了一個子模塊,顯示在每個單獨的文件中提交歷史,而不是隻訪問單個「子項目」提交對象中的所有文件/提交。

值得注意的是:

  1. 這個問題的子模塊並不在名單顯示,當我 調用:
    git submodule status
  2. 它在
    Parent_Project_repo/.gitmodules
    Parent_Project_repo/.git/config
    文件列爲子模塊&有相應的 Parent_Project_repo/.git/modules/Sub_Problem_Child_repo/文件夾。

我該如何將問題兒童納入名冊並能夠將Parent_Project_repo處理的所有提交作爲一個對象進行處理?


UPDATE:
我有「問題孩子」子模塊鑑別的唯一的區別是,它並沒有在/.git/modules/config文件「historySha」鍵,如:

[atomGithub] 
    historySha = 1936e4c373c130860a8f92683b517dad713ec37 

此外,這些命令沒有得到狀態列出的問題的孩子:

$ git submodule update --init --recursive 
$ git submodule update --recursive 
$ git submodule init 

...也沒有顯示在父項目中的GitHub上一個「@ e78c392」這表明我可以雙擊鏈接並得到回購,而不是在超級項目(父)的副本。

回答

1

如果使用git submodule add <URL>將git存儲庫設置爲「超級項目」內的子模塊,並且該子模塊不是在超級項目內作爲單個對象進行提交(即,如果在提交子模塊時超級項目,您必須提交子模塊中的每個單獨文件),然後按照以下步驟進行重新配置:

  1. 將所有工作保存在子模塊中。
  2. 階段並提交所有文件更改。
  3. 將所有提交都推送到GitHub。
  4. 如果您謹慎,請製作子模塊文件夾的安全副本
  5. 從超級項目.gitmodules文件(即刪除問題子模塊的列表)中刪除相關的子模塊部分。
  6. 階段.gitmodules更改git add .gitmodules
  7. 從超級項目.git/config中刪除相關的sunmodule部分。
  8. 運行git rm --cached -rf PATH_TO_SUBMODULE其中PATH_TO_SUBMODULE是子模塊文件夾的實際路徑。
  9. 運行rm -rf .git/modules/PATH_TO_SUBMODULE
  10. 提交git commit -m "Removed submodule commit message"
  11. 刪除未跟蹤現在子模塊文件:rm -rf PATH_TO_SUBMODULE
  12. git submodule add <URL>
  13. 測試,看是否有變化的子模塊(FWIW,修改兩個文件)作爲單個對象的超級項目提交時的處理方式。
  14. 成功嗎?刪除子模塊項目的安全副本。