Saya biasanya bekerja di server jauh melalui ssh (layar dan vim), di mana saya memiliki repositori Git. Terkadang saya tidak online, jadi saya memiliki repositori terpisah (dikloning dari remote saya) di laptop saya.
Namun, saya tidak dapat menarik dari repositori ini di sisi yang jauh karena saya biasanya di belakang firewall atau saya tidak memiliki IP publik.
Saya telah membaca bahwa saya harus mendorong hanya ke repositori kosong. Lalu bagaimana saya harus mendorong perubahan saya ke repositori jarak jauh saya?
git pull github master
.Jawaban:
receive.denyCurrentBranch updateInstead
Opsi ini ditambahkan di Git 2.3 , dan itu membuat server memperbarui pohon kerjanya jika bersih.
Jadi, jika Anda memastikan bahwa Anda selalu melakukan sebelum menarik secara lokal, dan menjaga pohon kerja yang bersih di server (yang harus Anda lakukan untuk menghindari konflik penggabungan), maka opsi ini adalah solusi yang baik.
Penggunaan sampel:
Keluaran:
sumber
--local
opsional?--local
hanya memengaruhi direktori saat ini,--global
memengaruhi semua repositori git dengan~/.gitconfig
, lihatman git-config
.Opsi terbaik
Mungkin cara paling bersih, paling membingungkan, dan paling aman untuk mendorong ke repositori jarak jauh non-telanjang Anda, adalah mendorong ke cabang khusus di remote yang mewakili cabang laptop Anda.
Mari kita lihat kasus paling sederhana, dan anggap Anda hanya memiliki satu cabang di setiap repo: master. Saat Anda mendorong repo jarak jauh dari laptop Anda, alih-alih mendorong master -> master, push master -> laptop-master (atau nama yang serupa). Dengan cara ini, push tidak mempengaruhi cabang master yang saat ini sedang diperiksa di repo jarak jauh. Untuk melakukan ini dari laptop, perintahnya cukup sederhana:
Ini berarti bahwa cabang master lokal akan didorong ke cabang bernama "laptop-master" di repositori jarak jauh. Di repo jarak jauh Anda, Anda akan memiliki cabang baru bernama "laptop-master" yang kemudian dapat Anda gabungkan menjadi master jarak jauh saat Anda siap.
Opsi Alternatif
Mungkin juga untuk hanya mendorong master -> master, tetapi mendorong ke cabang repo non-telanjang yang saat ini check-out umumnya tidak disarankan, karena dapat membingungkan jika Anda tidak mengerti apa yang sedang terjadi. Ini karena mendorong ke cabang check-out tidak memperbarui pohon kerja, jadi memeriksa
git status
di cabang check-out yang didorong ke dalam akan menunjukkan perbedaan yang berlawanan persis seperti apa yang baru-baru ini didorong. Terutama akan membingungkan jika pohon kerja kotor sebelum dorongan itu dilakukan, yang merupakan alasan besar mengapa ini tidak dianjurkan.Jika Anda ingin mencoba hanya mendorong master -> master, maka perintahnya adalah:
Tetapi ketika Anda kembali ke repo jarak jauh, kemungkinan besar Anda ingin melakukan suatu
git reset --hard HEAD
untuk menyinkronkan pohon kerja dengan konten yang didorong. Ini bisa berbahaya , karena jika ada perubahan yang tidak dikomit di pohon kerja jarak jauh yang Anda ingin simpan akan menghapusnya. Pastikan Anda tahu apa konsekuensi dari ini sebelum Anda mencobanya, atau setidaknya buat cadangan terlebih dahulu!EDIT Sejak Git 2.3, Anda dapat menggunakan "push-to-deploy" git push: https://github.com/blog/1957-git-2-3-has-been-released . Tetapi mendorong ke cabang terpisah dan kemudian menggabungkan biasanya lebih baik karena melakukan penggabungan aktual (karenanya bekerja dengan perubahan yang tidak dikomit seperti halnya penggabungan).
sumber
git config receive.denyCurrentBranch ignore
harus dilakukan sebelum mendorong ke repo non-telanjanggit push origin master:laptop-master && ssh user@remotemachine 'cd repos_path && git merge laptop-master'
Saya menyarankan untuk memiliki repositori telanjang dan repositori lokal yang berfungsi (non-telanjang) di server Anda. Anda dapat mendorong perubahan dari laptop ke repo bare server dan kemudian menarik dari repo telanjang ke repo yang berfungsi server. Alasan saya mengatakan ini adalah karena Anda mungkin memiliki banyak cabang lengkap / tidak lengkap di server yang ingin Anda tiru pada laptop.
Dengan cara ini Anda tidak perlu khawatir tentang keadaan cabang memeriksa server repo yang bekerja sambil mendorong perubahan ke server.
sumber
Pilihan lain adalah mengatur terowongan ssh terbalik sehingga Anda dapat menarik alih-alih mendorong.
Dan jika Anda ingin terowongan berjalan di latar belakang
sumber
Anda dapat melakukan:
$git config --bool core.bare true
ini dapat dilakukan dalam repositori telanjang atau sentral sehingga akan menerima file apa pun yang didorong dari repositori non telanjang. Jika Anda melakukan ini di repositori non telanjang maka kami tidak dapat mendorong file dari repositori non telanjang ke telanjang.
Jika Anda mempraktikkan GIT dengan membuat repo sentral dan non-telanjang di PC, ia mungkin tidak menampilkan file yang didorong di beberapa PC tetapi telah didorong. Anda dapat memeriksanya dengan menjalankan.
$git log
di repo pusat.Selain jika Anda menekan ke GitHub itu akan menampilkan file di sana.
sumber