সংগ্রহস্থল-অভ্যন্তরীণ-ভান্ডারগুলির সাথে কীভাবে মোকাবেলা করা গিট নিয়ে একটি চলমান প্রশ্ন been গিটের সাবমডিউলগুলি পরিস্থিতি মোকাবিলার এক উপায়, ট্র্যাক রাখতে আরও কিছুটা জটিলতা যোগ করার ব্যয়ে। গিট সাইটের সাবমডিউলগুলির সাথে একটি ভূমিকা রয়েছে ।
মূল ধারণাটি হ'ল আপনার সংগ্রহস্থলের কোনও পাথের সাথে যুক্ত অন্য গিট সংগ্রহস্থলের একটি রেফারেন্স রাখা। এই রেফারেন্সগুলি .gitmodules
আপনার সংগ্রহস্থলের মূলের একটি ফাইলে সংরক্ষণ করা হয় (যা গিট দ্বারা পরিচালিত হয়, তাই এটি একা রেখে যান)। সাব্পোডিয়ুলস রয়েছে এমন একটি রেপো ক্লোনিং করার সময় কিছু জটিলতা দেখা দেয়: আপনাকে অবশ্যই ফাইলটি git submodule init
তৈরি করতে .gitmodules
হবে এবং তারপরে git submodule update
সাবমডিয়ুলগুলি ক্লোন করতে হবে।
সাব-মডিউলটি ব্যবহার করে কীভাবে আমি আমার ডটফিলস সংগ্রহস্থলগুলিতে একটি নতুন ভিআইএম প্লাগইন যুক্ত করব (আমি ~/.vim/
এই রেপোর সাথে .vim/
আলিয়াস করেছি):
$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir
এর পরে submodule add
, একটি 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 diff
এটির সংগ্রহস্থল থেকে এটি একটি নির্দিষ্ট প্রতিশ্রুতি হিসাবে বিবেচনা করবে। সেই পথটির (যেমন git log -1 -u .vim/bundle/vim-elixir
) লগগুলি পৃথক বা লগগুলির দিকে তাকানোর সময় , গিট এটিকে এক লাইনের স্ট্রিং হিসাবে দেখায়:
Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
প্লাগইনের সর্বশেষতম সংস্করণে আপডেট করা সাবমডিউলের সংগ্রহস্থলে প্রবেশ করা এবং একটি নতুন প্রতিশ্রুতি যাচাইয়ের সাথে মিলে যায় এবং তারপরে এটি আপনার ভাণ্ডারে প্রতিশ্রুতিবদ্ধ:
$ 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