Saya telah menyiapkan git untuk saya gunakan sendiri - jadi saya dapat mengakses proyek dari 'di mana saja', dan menjaga keamanan versi jika saya bekerja pada bagian X di sini, dan bagian Y di sini, dan dapat bergabung jika perlu.
Namun, hanya satu dari mesin pengembangan saya yang memiliki IP statis. Otak saya macet dalam mode CVS, jadi saya mencoba mengatur git agar mesin itu menjadi server 'sentral', yang digunakan semua orang.
Jenis pekerjaan ini. Saya punya banyak mesin AC yang melakukan git-pull dari 'master' M. Mereka melakukan git push untuk mengirim data kembali.
Masalahnya muncul jika saya melakukan pengembangan pada master. Pertama, saya tidak tahu bagaimana cara mendapatkan repo pusat untuk menyediakan versi terbaru tanpa melakukannya
git reset --hard HEAD
yang sepertinya agak berlebihan. Dan jika saya melakukan pengembangan pada mesin pusat sebelum mengatur ulang, saya tidak yakin bagaimana menggabungkannya dengan perubahan yang telah didorong ke atas.
Sesuatu tentang model mental saya jauh. Tolong?
Jawaban:
Anda ingin repositori pusat Anda kosong. Katakanlah mesin yang digunakannya dinamai
static
:Repositori kosong ini adalah titik pertemuan sentral: ini untuk mendorong dan menarik dari, bukan pengembangan.
Lakukan pengembangan Anda pada klon repositori pusat:
Bahkan jika Anda aktif
static
, bekerjalah dalam klon:Meskipun Anda satu-satunya yang mengerjakan repositori ini, biasakan melakukan pekerjaan Anda pada apa yang disebut dokumentasi git sebagai cabang topik . Manfaat langsung dari ini adalah membuat master tetap bersih , yaitu Anda selalu dapat menarik dari cabang master pusat ke master repositori lokal Anda saat ini tanpa penggabungan.
Sebagai contoh:
Itu mungkin tidak terlihat seperti masalah besar, tetapi memberi Anda kebebasan untuk meninggalkan proyek sebagaimana diwakili di cabang itu dalam keadaan setengah matang, atau jika ide keren Anda ternyata gagal, Anda dapat dengan mudah membuang cabang itu tanpa melanggar hal lain dalam proyek Anda yang sudah bekerja di cabang lain. Mulligan gratis tak terbatas!
Mungkin Anda pulang malam itu dan menambahkan fitur baru. Pagi berikutnya, kamu
untuk memperbarui master lokal Anda untuk mencerminkan apa yang ada di repositori pusat.
Tetapi sekarang katakan Anda telah memperbaiki bug foo dan siap untuk memasukkannya ke cabang master Anda. Pertama Anda ingin mengintegrasikannya dengan perubahan dari tadi malam:
The
rebase
perintah membuat tampilan repositori Anda seolah-olah Anda tetap bug foo di atas fitur baru semalam. (Ini semacam sukasvn update
, tetapi lebih fleksibel dan kuat.)Sekarang untuk memasukkannya ke master utama Anda:
Kami telah memperlakukan master sebagai istimewa, tetapi itu hanya konvensional. Anda dapat berbagi pekerjaan di berbagai cabang repositori yang berbeda melalui repositori git
static
dengan mudah.sumber
git init --bare
ada argumen lain. Ini akan menggunakan direktori kerja saat ini atau pengaturan lingkungan GIT_DIR jika diatur. Saya percaya Anda perlu git 1.6.5.x untuk mengambil argumen direktori.Jika Anda memiliki server pusat dengan repositori central git, repositori tersebut haruslah
bare
repositori. Repositori kosong tidak memiliki salinan file yang berfungsi di dalamnya. Akibatnya, jika Anda bekerja pada mesin pusat itu, Anda tidak bekerja dengan repositori pusat secara langsung, tetapi dengan klon lokal.sumber
Jawaban ini mirip dengan jawaban gbacon , tetapi mengambil pendekatan bahwa Anda sudah memiliki pengaturan repo lokal, dan ingin membuat master jarak jauh yang diperlakukan sebagai repo pusat. Itu hanya menambahkan detail dari pendekatan yang berbeda.
Saya menggunakan git untuk menyimpan file dot-config saya. Saya mendorong dan menarik dari apa yang saya anggap sebagai 'repo sentral'. Cukup mudah untuk mengatur ulang semua file dot saya melalui beberapa komputer.
Ini menciptakan repo kosong kosong di situs repo.
Sekarang jika saya sudah memiliki repo yang ada secara lokal, saya bisa mendorongnya ke situs remote.
chdir ke direktori lokal.
Tambahkan repo jarak jauh sebagai asal, jadi tekan / tarik akan bertindak atas repo itu.
Dorong master saya ke titik asal (seperti yang sebelumnya diberi label melalui remote git). Sekarang repo jarak jauh diperlakukan sebagai 'repo sentral' saya. Semua push / pull git saya akan berinteraksi dengan asal.
Jika saya pergi ke host lain, saya dapat dengan mudah menarik melalui klon yang repo ke lokasi baru.
Jika saya ingin melakukan pengembangan DI server jauh, saya mengkloning dulu, lalu mendorong / menarik kembali ke repo telanjang.
Anda mungkin harus mengatur
git config --add branch.master.remote origin
sehinggagit pull
Anda tidak mengeluh bahwa Anda tidak cukup spesifik. Alternatif lainnya adalah dengan mengatur cabang master Anda ke--track
asal yang jauh. Berguna jika Anda memiliki banyak cabang.sumber
Saya baru saja meneliti masalah yang sama hari ini. Posting blog ini memiliki banyak diskusi tentang masalah ini, tetapi pendapat mayoritas adalah untuk melakukan apa yang dikatakan Manni. Lihatlah komentar pada pos oleh David French untuk beberapa kemungkinan lain, termasuk apa yang harus dilakukan jika Anda akhirnya secara keliru mendorong ke repositori yang tidak memiliki komitmen kerja dalam indeks atau pohon kerja. "git reset –soft HEAD ^" akan mendukung perubahan yang didorong tanpa mengganggu pekerjaan Anda.
sumber