git bekerja pada dua cabang secara bersamaan

168

Saya punya proyek dengan banyak cabang.

Saya ingin bekerja di beberapa cabang secara bersamaan tanpa harus bolak-balik git checkout.

Apakah ada cara saya bisa melakukan itu selain menyalin seluruh repositori di tempat lain?

nama
sumber
kemungkinan duplikat dari beberapa direktori kerja dengan Git?
meagar
1
Git 2.5+ (Q2 2015) akan secara resmi mendukung ini dengan perintah baru git checkout --to=<path>. Lihat jawaban saya di bawah ini .
VonC
2
Sebenarnya, perintahnya adalah git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Jawaban:

156

Git 2.5+ (Q2 2015) mendukung fitur ini!

Jika Anda memiliki repo git cool-app, cd to root ( cd cool-app), jalankan git worktree add ../cool-app-feature-A feature/A. Ini memeriksa cabang feature/Adi direktori khusus baru itu sendiri cool-app-feature-A,.

Itu menggantikan skrip yang lebih lama contrib/workdir/git-new-workdir, dengan mekanisme yang lebih kuat di mana pohon-pohon yang bekerja "terhubung" sebenarnya direkam dalam $GIT_DIR/worktreesfolder baru repo utama (sehingga bekerja pada OS apa pun, termasuk Windows).

Sekali lagi, setelah Anda mengkloning repo (dalam folder seperti /path/to/myrepo), Anda dapat menambahkan worktrees untuk cabang yang berbeda di jalur independen yang berbeda ( /path/to/br1, /path/to/br2), sambil menghubungkan pohon-pohon yang bekerja dengan sejarah repo utama (tidak perlu menggunakan --git-diropsi lagi)

Lihat lebih banyak di " Beberapa direktori kerja dengan Git? ".

Dan setelah Anda membuat worktree, Anda dapat memindahkan atau menghapusnya (dengan Git 2.17+, Q2 2018).

VONC
sumber
2
Ini harus menjadi jawaban yang baru diterima, karena 2.5.X sekarang adalah versi yang disarankan, bahkan untuk windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00
40

Lihatlah $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

skrip sederhana untuk membuat direktori kerja yang menggunakan symlink untuk menunjuk ke repositori yang ada. Hal ini memungkinkan memiliki cabang yang berbeda di direktori kerja yang berbeda tetapi semua dari repositori yang sama.

Stefan Näwe
sumber
2
Saya tahu ini sudah tua, tetapi bisakah Anda memberikan penjelasan?
dav_i
@dav_i: Suka ini ?
Stefan Näwe
@ StefanNäwe Ah saya bingung - terlalu pagi, memperbarui jawaban Anda dengan tautan.
dav_i
0

Seperti kata teman kami, VonC lima bulan lalu, sekarang ada fitur baru sejak versi 2.5.x yang berfungsi. git worktree .

Komunitas
sumber
Bukankah itu sama dengan apa yang saya sebutkan 5 bulan yang lalu dalam jawaban saya di atas ?
VonC
Ops. Sekarang aku merasa tidak enak. Saya belum memperhatikan hal itu. Salahku.
0

Git mendukung beberapa worktree secara bersamaan. Untuk informasi lebih lanjut, lihat:

Namun sangat sulit untuk mendukung beberapa worktree dengan ID. Misalnya, ini permintaan tambahan di JGet (eclipse ID) untuk mendukung worktree.

Jadi, Anda harus mengelola proyek secara manual (command line) dengan banyak masalah atau bekerja dengan satu meja kerja dalam sebuah IDE.

Mostafa
sumber
Sampai sekarang, jawaban ini tidak benar. Harap perbarui jawabannya.
narendra-choudhary
-2

Tidak juga karena Git hanya mendukung memiliki satu salinan data repositori yang berfungsi dalam direktori repositori.

Jika Anda ingin komit / tarik ke repositori yang sama dengan dua copy pekerjaan yang berbeda, Anda bisa membuat repositori kosong dan mengkloningnya ke dua salinan yang berfungsi .

Setiap kali Anda menyelesaikan sesuatu, Anda cukup mendorong ke repositori telanjang "utama" .

Beberapa petunjuk:

man git-clone

git clone --bare

BastiBen
sumber
3
"Git hanya mendukung untuk memiliki satu salinan data repositori yang berfungsi" -1 Tidak benar, lihat jawaban tentang git-new-workdir.
sleske
Itu ide yang bagus. Hanya mengkloningnya dua kali.
Serge Vinogradoff