Tarik untuk cabang Git lain tanpa beralih


55

kami baru-baru ini beralih dari SVN ke Git dan pada saat yang sama menempatkan sistem live kami ke dalam kontrol versi (alih-alih checkout lokal dan menyalin file ke live).

Pada proyek saya ditugaskan untuk kita semua mengakses repositori yang sama dan untuk mendapatkan perubahan kita tinggal di git pullsana. Ini menyebabkan masalah karena desainer web kami mendorong perubahan ke VCS yang seharusnya belum tayang tetapi harus berada di lingkungan pengujian web.

Ketika salah satu pengembang sekarang aktif, ia mendapatkan semua (mungkin belum selesai) perubahan.

Saya berpikir untuk beralih langsung ke cabang tambahan dan hanya menggabungkan apa yang berubah tetapi karena kurangnya pengetahuan git saya tidak tahu caranya.

Ide saya adalah:

  • Buat Cabang baru di live ( git branch live).
  • Setiap kali sesuatu harus ditayangkan
    • Tarik perubahan pada master (seperti git checkout master; git pull; git checkout live:)
    • git merge master

Masalahnya adalah beralih ke menguasai atau menarik semuanya langsung ke sistem live akan menyebabkan masalah jadi saya lebih suka menghindari ini.

Apakah ada cara untuk melakukan ini atau ada cara yang lebih baik untuk mengelola sistem Live (kecuali untuk pelatihan webbies untuk tidak mendorong hal-hal yang belum selesai).


git pull --allakan secara default tidak menarik master menjadi live, itu akan menarik master dan menggabungkannya dengan master, dan (jika ada di server) tarik langsung untuk bergabung ke live. Apakah kamu sudah mencobanya?
Tobias Kienzler

Apakah masalah Anda disebabkan oleh file yang tidak di bawah kontrol versi sebelum bercabang hidup dan ditambahkan git setelah modifikasi untuk dikuasai nanti? Itulah yang terjadi pada saya sebelumnya, biasanya sudah cukup untuk mengganti nama sementara file itu, atau jika tidak diperlukan secara langsung , gunakan git checkout -funtuk mengabaikan masalah - tetapi buat cadangan!
Tobias Kienzler

Jawaban:


21

Anda dapat menggunakan git stashsebelum memeriksa master dan menarik, dan setelah memeriksa hidup lagi gunakan git stash pop(atau jika git Anda lebih tua, git stash applydan git stash cleardengan asumsi Anda belum menyembunyikan hal lain)


6
git pull --allakan mengambil semua remote, tetapi masih akan mencoba untuk menggabungkan cabang (atau cabang default) ke cabang saat ini juga.
mipadi

@mipadi ya, tetapi hanya cabang saat ini ke dalam dirinya sendiri tanpa mencoba checkout master dan menyebabkan konflik, bukan?
Tobias Kienzler

Ini akan menggabungkan cabang apa pun yang dikonfigurasi untuk secara otomatis bergabung ke cabang saat ini (jika cabang tersebut dikonfigurasi).
mipadi

1
@Superole Ini didokumentasikan sebagai "ambil semua remote", yang mencakup tidak hanya beberapa repositori, tetapi juga cabang. Meskipun dalam kilas balik, git fetch --allmungkin jawaban yang lebih baik
Tobias Kienzler

2
@TobiasKienzler Ini hanya menginstruksikan git untuk mengambil dari semua remote yang dikonfigurasi. Kasus yang paling umum adalah hanya memiliki satu asal bernama remote. JIKA Anda kebetulan memiliki lebih dari satu jarak jauh dengan cabang yang sama dengan arus Anda, dan mereka tidak berada dalam hubungan maju-cepat satu sama lain, MAKA menggunakan --allopsi akan memberi Anda gurita penggabungan dari berbagai versi cabang ke arus. ! Jadi saran saya adalah untuk menjauh dari --allkecuali itu yang Anda cari, karena dalam kebanyakan kasus lain itu tidak akan memberi Anda apa-apa.
Superole


5

Selesaikan masalahnya terlebih dahulu. Mereka tidak boleh mendorong ke cabang yang tidak mereka dorong.

Apa yang tampaknya Anda tanyakan akan seperti sesuatu

git checkout live
git pull origin master

Ini akan mencoba menggabungkan master jarak jauh dan cabang langsung Anda.


Masalahnya adalah bahwa saat ini kami hanya memiliki satu cabang dan itu tidak akan benar-benar mungkin untuk mengubah itu karena semua orang terlalu terbiasa dengan SVN dan tidak mau belajar keuntungan dari sesuatu yang baru. Hanya dimungkinkan untuk membuat cabang baru di direktori langsung. Menggabungkan master jarak jauh ke live branch adalah apa yang ingin saya hindari karena saya tidak dapat mencegah siapa pun mendorong kode debug, fungsi tidak lengkap, kesalahan sintaksis, dan apa pun yang lain ke master (bagaimanapun juga saya adalah pengembang junior). Terima kasih atas saran Anda.
Morfildur

2
@dbeme: Anda bisa menggunakan tarball dan patch. ;) Kecuali mereka mau belajar git (dan tidak sulit untuk bercabang dan bergabung) Anda akan mengalami masalah.
Josh K

0

Saya sarankan Anda membuat git repo pengujian untuk semua orang berkomitmen. Semua repo, termasuk situs web langsung Anda akan menjadi klon dari repo pengujian. Dengan cara ini, siapa pun dapat mendorong ke pengujian tanpa menyentuh situs web langsung. Ketika seseorang perlu memperbarui situs langsung, maka Anda dapat menarik situs langsung dari repo pengujian git. Alur kerja ini cukup mirip dengan SVN. Untuk fleksibilitas ekstra, saya sarankan menggunakan cabang "hidup" yang Anda uraikan.

Singkatnya, git repo semua orang adalah klon dari repo pengujian. Situs produksi langsung juga merupakan tiruan dari repo pengujian juga. Atau, pengujian bisa menjadi kloning dari produksi langsung sehingga "git push" selalu bergerak menuju produksi.

Opsi lain termasuk menambahkan cabang "langsung" ke pengaturan ini atau termasuk repo "pementasan" antara pengujian dan produksi. Untuk keamanan ekstra, saya sarankan membatasi akses ke repo live git dan memaksa orang untuk menggunakan skrip aman yang melakukan tarikan untuk produksi langsung.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.