Karena ini ditandai dengan git, saya harap kurangnya pengetahuan SVN saya bisa diabaikan.
Saat ini saya sedang mengkloning repo dan mengkloning cabang tertentu menggunakan gitk.
Anda mengkloning seluruh repositori jarak jauh tidak hanya cabang tertentu.
Repositori paling baik dibayangkan sebagai basis data, jadi Anda membuat tiruan dari kondisi saat ini dari basis data jauh. Tetapi setelah itu, Anda bekerja pada salinan database Anda sendiri; jika Anda berkomitmen, Anda mengubah database lokal Anda.
The fetch
Perintah ini digunakan untuk menjaga database lokal sinkron dengan satu remote.
Biasanya dari database lokal itu, Anda checkout cabang untuk bekerja. Ini tidak lain dari penanda internal untuk git, di mana pekerjaan Anda saat ini dimulai.
Katakanlah, Anda sedang mengerjakan repositori sederhana, di mana tidak ada cabang selain itu master
, Anda bisa melihat ke dalam .git
folder untuk mengungkap "sihir":
Asumsikan komit terakhir Anda (aktif master
) adalah 182e8220b404437b9e43eb78149d31af79040c66
, Anda akan menemukan persisnya di bawah cat .git/refs/heads/master
.
Dari yang Anda cabut dari cabang baru git checkout -b mybranch
, Anda akan menemukan pointer yang sama persis di file cat .git/refs/heads/mybranch
.
Cabang tidak lebih dari "pointer". Marker "berfungsi" disebut a HEAD
.
Jika Anda ingin tahu di mana Anda HEAD
berada:
cat .git/HEAD
yang mengatakan misalnya ref: refs/heads/mybranch
, yang pada gilirannya menunjuk ( cat .git/refs/heads/mybranch
) ke hash komit78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
Komit aktual disimpan di bawah objects
folder (caranya adalah topiknya sendiri).
Folder proyek hanya berisi konten untuk cabang itu dan saya tidak bisa melihat semua cabang seperti di SVN, yang sedikit membingungkan bagi saya.
Jangan bingung working directory
dengan "git-database" secara keseluruhan. Seperti yang saya katakan di atas, direktori kerja Anda hanya snapshot dari (mungkin) subset.
Katakanlah Anda memiliki cabang yang berbeda, direktori kerja Anda didedikasikan untuk mengerjakan cabang itu saja (meskipun Anda bisa meletakkan pekerjaan dari sana di tempat lain).
Biasanya, jika Anda ingin melihat, cabang apa yang ditentukan untuk proyek, Anda memiliki kemungkinan
git branch
untuk cabang lokal
git branch --remote
untuk cabang terpencil
git branch -a
untuk keduanya
(atau git branch -v
)
Karena git adalah sistem kontrol versi terdistribusi, git tidak hanya memungkinkan, tetapi dianjurkan, untuk membuat cabang-cabang yang berbeda secara lokal / jauh.
Alur kerja khas saya adalah:
- cabang fitur cabang off
- cabang cabang WIP (sedang dalam proses) dari itu
- bekerja seperti apa pun yang Anda inginkan - bahkan jika Anda melakukan setelah satu baris; itu tidak masalah
Ketika fitur selesai:
- squash / ulang
WIP
cabang (dengan rebasing interaktif) = buat satu komit dari itu
- menggabungkan
WIP
cabang ke cabang fitur dan menawarkan itu (jika Anda bekerja dengan github tawaran itu akan disebut "permintaan tarik") untuk diintegrasikan ke dalam cabang (master) yang stabil.
Saya juga ingin tahu cara menangani proses di mana saya perlu wprl pada dua cabang pada saat yang sama, misalnya, saya perlu membuat perbaikan terbaru pada master tetapi tetap menyimpan konten dari cabang lain juga.
Itu tergantung pada bagaimana proyek Anda disusun:
Katakanlah Anda memiliki master yang stabil. Dan fitur hanya dikembangkan dari cabang stabil itu - jadi biasanya di belakang cabang fitur. Maka Anda akan memiliki komit terakhir pada master yang akan menjadi root dari cabang fitur.
Maka Anda akan membuat komit pada cabang master dan dapat memutuskan, apakah akan menggabungkan kedua cabang bersama-sama atau untuk rebase (yang merupakan semacam penggabungan untuk pengguna dengan kebutuhan canggih, katakanlah).
Atau Anda selalu dapat membuat perubahan pada cabang (mis. master
) Dan memilihnya ke cabang lain.
Apa yang dimaksud dengan konvensi nama rekomendasi untuk membuat folder yang menyertakan cabang yang diklon dari repo di GIT, misalnya myproject-branchname
Ini terserah kamu.
Biasanya, Anda berakhir dengan nama repositori.
Tetapi ada beberapa kesempatan, ketika ini tidak diinginkan:
mis. Anda mengkloning oh-my-zsh dengan git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
Here .oh-my-zsh
secara eksplisit disebut sebagai target.