Havuz içi havuzlarla nasıl başa çıkılacağı, git ile devam eden bir sorudur. Git'in alt modülleri , takip edilmesi gereken biraz daha karmaşıklık eklemek pahasına, durumu ele almanın bir yoludur. Git sitesi alt modüller için bir giriş var .
Temel fikir, deponuzdaki bir yolla ilişkili başka bir git deposuna referans tutmaktır. Bu referanslar, deponuzun .gitmodules
kök dizinindeki bir dosyada saklanır (ki bunlar git tarafından yönetilir, bu nedenle onu yalnız bırakın). Karmaşıklığın bir kısmı, alt modülleri olan bir repoyu klonlarken devreye giriyor: dosyayı git submodule init
oluşturmak için .gitmodules
ve sonra git submodule update
da alt modülleri klonlamak için açıkça kullanmalısınız .
İşte bir submodule kullanarak dotfiles deposuna ( ~/.vim/
bu repoya takma işlem yaptım) yeni bir vim eklentisini nasıl ekleyeceğim konusunda bir yol gösterici .vim/
:
$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir
Bundan sonra submodule add
, bir dosya aşağıdaki gibi bir şeyle git status
değiştirilmiş (veya oluşturulmuş) .gitmodules
:
[submodule ".vim/bundle/vim-elixir"]
path = .vim/bundle/vim-elixir
url = https://github.com/elixir-lang/vim-elixir.git
Ayrıca .vim/bundle/vim-elixir
yeni bir dosya olarak göstermelidir . Git şu yolu özel olarak ele alıyor: dosya sisteminizdeki normal bir dizin (vim normal şekilde yüklüyor), ancak git diff
deposundan belirli bir taahhüt olarak görecek. Bu yol için dif ya da loglara bakarken (ör. git log -1 -u .vim/bundle/vim-elixir
) Git git bunu şöyle bir satırlık gösterecektir:
Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
Eklentinin en son sürümüne güncellemek, alt modülün deposuna girmeye ve yeni bir işlemi kontrol etmeye ve ardından bunu deponuza teslim etmeye karşılık gelir :
$ cd .vim/bundle/vim-elixir
$ git remote -v # note: the submodule repo's origin, not my repo's
origin https://github.com/elixir-lang/vim-elixir.git (fetch)
origin https://github.com/elixir-lang/vim-elixir.git (push)
$ git pull
# ...
$ cd - # back to my repository's root
$ git status
# ...
modified: .vim/bundle/vim-elixir (new commits)
$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2
$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir