วิธีจัดการกับที่เก็บข้อมูลภายในที่เก็บข้อมูลเป็นคำถามที่ต่อเนื่องกับคอมไพล์ submodulesของ Git เป็นวิธีหนึ่งในการจัดการกับสถานการณ์โดยมีค่าใช้จ่ายในการเพิ่มความซับซ้อนเล็กน้อยเพื่อติดตาม เว็บไซต์คอมไพล์มีการแนะนำให้ submodules
แนวคิดพื้นฐานคือการเก็บการอ้างอิงไปยังที่เก็บ git อื่นที่เกี่ยวข้องกับเส้นทางบนพื้นที่เก็บข้อมูลของคุณ การอ้างอิงเหล่านี้ถูกเก็บไว้ในไฟล์.gitmodules
ในรูทของที่เก็บของคุณ (ซึ่งจัดการโดย git ดังนั้นปล่อยให้อยู่คนเดียว) ความซับซ้อนบางอย่างเกิดขึ้นเมื่อทำการคัดลอก repo ที่มี submodules: คุณต้องgit submodule init
สร้าง.gitmodules
ไฟล์อย่างชัดเจนแล้วgit submodule update
ทำการโคลน submodules
นี่คือคำแนะนำว่าฉันจะเพิ่มปลั๊กอิน vim ใหม่ในที่เก็บ dotfiles ของฉันได้อย่างไร (ฉันได้~/.vim/
ใช้ชื่อแทน repo นี้.vim/
) โดยใช้ submodule:
$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir
หลังจากsubmodule add
, a git status
จะแสดงว่าคุณได้แก้ไข (หรือสร้าง) .gitmodules
ไฟล์ด้วยสิ่งนี้:
[submodule ".vim/bundle/vim-elixir"]
path = .vim/bundle/vim-elixir
url = https://github.com/elixir-lang/vim-elixir.git
มันควรจะแสดง.vim/bundle/vim-elixir
เป็นไฟล์ใหม่ Git ปฏิบัติกับพา ธ นั้นเป็นพิเศษตอนนี้: มันเป็นไดเรกทอรีปกติในระบบไฟล์ของคุณ (ดังนั้นเสียงเรียกเข้าก็จะโหลดตามปกติ) แต่git diff
จะถือว่ามันเป็นคอมมิทเฉพาะจากคอมมิทของมัน เมื่อดู diffs หรือ log สำหรับเส้นทางนั้น (เช่นgit log -1 -u .vim/bundle/vim-elixir
) git จะแสดงมันเป็นสตริงหนึ่งบรรทัดดังนี้:
Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
การอัปเดตปลั๊กอินเวอร์ชันล่าสุดสอดคล้องกับการเข้าไปในที่เก็บของ submodule และตรวจสอบการคอมมิทใหม่จากนั้นคอมมิทไปที่ที่เก็บของคุณ:
$ 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