2013-04-25 79 views
3

因此,我對整個git主題頗爲陌生。但我想要做的是在多臺機器上同步我的dotfiles。我知道那裏有很多教程,我有基本的概念。但我的問題更具體。第一件事:我正在使用Windows(現在)和Vim。最重要的是,我使用vundle來管理我的插件。現在插件本身是git-repos。目錄~/.vim(這是我想要同步的主要回購)包含它們。將git回購轉換爲子模塊

所以我的問題是,我如何初始化submodule現有的回購?

我現在得到的是我的~/.vim/bundle/...中的一堆綠色文件夾,代表了其他回購協議。 git status命令報告它們爲未跟蹤的內容(並且沒有它不是我的.gitignore做一些時髦的東西)。

如果您不熟悉綠色文件夾「phenomenon」,您可能需要查看我的回購。

P.S.其中一個子文件夾說修改的內容而不是未跟蹤的內容,儘管我沒有碰它。我不知道爲什麼。 。

回答

1

每次你看到沒有任何明確的修改修改的內容時,檢查全局設置(core.autocrlf, core.filemode),它可以使結賬變化)

對於內.vim/bundle/每個目錄,您需要:

  • 去該模塊:(git的初始化)cd .vim/bundle/aModule
  • 初始化git倉庫,提交和推到一個新的git倉庫在GitHub上
  • 回來父回購:cd ..(你在.vim/bundle/
  • git submodule add https:///github.com/tairun/aModule aModule(注意,此子模塊能夠track the latest of a branch, if you want to

然後git submodule update --init --remote

+0

感謝您的回答。需要一些時間來測試一切。到目前爲止,所有的工作都非常成功,儘管我沒有完全按照你的意思去做。我仍然不熟悉像'git submodule update --init --remote'這樣的大量鏈接命令,所以我只能猜測他們做了什麼。我可能會在稍後回來並分享我的步驟。但基本上我做的是(從我的回購頂部)'git submodule add [email protected]:user/repo.git bundle/aBundle'。當我遇到'index'錯誤時,我運行'git rm --cache bundle/aBundle'。從那裏我會做一個git子模塊更新--init。 – Sensei 2013-04-27 15:25:18

+0

@Sensei:您可能應該將其作爲單獨的答案發布。這個問題可能並不完全清楚,你的vundle插件是從web *克隆的git repos *,並且你試圖用一個基本的子模塊替換它們。 – naught101 2015-02-03 13:16:27

3

如果所有的包都只是沒有修改基本克隆,你可以做這樣的事情:從你的dotfiles回購的根:

for d in `find .vim/bundle/ -maxdepth 1 -mindepth 1 -type d` 
do 
    pushd $d 
    export url=$(git config --get remote.origin.url) 
    popd 
    git submodule add $url $d 
done 

這應該工作不夠好 - 如果任何捆綁ISN」 t存儲庫,或者如果您手動添加它,那麼它只會傳遞該目錄。

然後,你可以做一個git submodule foreach git pull更新它們,並添加它們來更新你的dotfiles回購的參考。

+0

這正是我所需要的。謝謝。順便說一句,我還添加了一些檢查,以確保在試圖添加它之前,子模塊是git repo。這樣我就可以在一個文件夾中使用它,其中一些子文件夾是回收的,有些則不是 – mattgately 2016-07-28 13:49:17