git làm việc trên hai nhánh cùng một lúc


168

Tôi có một dự án với nhiều chi nhánh.

Tôi muốn làm việc trên một số chi nhánh đồng thời mà không cần chuyển đổi qua lại với git checkout.

Có cách nào tôi có thể làm điều đó ngoài việc sao chép toàn bộ kho lưu trữ ở một nơi khác không?



1
Git 2.5+ (quý 2 năm 2015) sẽ chính thức hỗ trợ điều này với lệnh mới git checkout --to=<path>. Xem câu trả lời của tôi dưới đây .
VonC

2
Trên thực tế, lệnh sẽ là git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Câu trả lời:


156

Git 2.5+ (quý 2 năm 2015) hỗ trợ tính năng này!

Nếu bạn có repo git cool-app, cd vào root ( cd cool-app), hãy chạy git worktree add ../cool-app-feature-A feature/A. Này kiểm tra ra các chi nhánh feature/Aở riêng thư mục chuyên dụng mới của nó, cool-app-feature-A.

Điều đó thay thế một tập lệnh cũ hơn contrib/workdir/git-new-workdir, với một cơ chế mạnh mẽ hơn trong đó các cây làm việc "được liên kết" thực sự được ghi lại trong $GIT_DIR/worktreesthư mục mới repo chính (để nó hoạt động trên mọi HĐH, kể cả Windows).

Một lần nữa, một khi bạn đã nhân bản một repo (trong một thư mục như /path/to/myrepo), bạn có thể thêm worktrees cho các chi nhánh khác nhau trong khác nhau con đường độc lập ( /path/to/br1, /path/to/br2), trong khi có những cây làm việc liên quan đến lịch sử repo chính (không cần phải sử dụng một --git-dirlựa chọn nữa)

Xem thêm tại " Nhiều thư mục làm việc với Git? ".

Và một khi bạn đã tạo ra một bàn làm việc, bạn có thể di chuyển hoặc xóa nó (với Git 2.17+, Q2 2018).


2
Đây phải là câu trả lời mới được chấp nhận, vì 2.5.X hiện là phiên bản được đề xuất, ngay cả đối với windows i.imgur.com/oQvUhVl.png git-scm.com/doad/win
RAnders00

40

Hãy xem $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

một tập lệnh đơn giản để tạo một thư mục làm việc sử dụng các liên kết tượng trưng để trỏ đến một kho lưu trữ hiện có. Điều này cho phép có các nhánh khác nhau trong các thư mục làm việc khác nhau nhưng tất cả từ cùng một kho lưu trữ.



2
Tôi biết điều này là cũ, nhưng bạn có thể cung cấp một số lời giải thích xin vui lòng.
dav_i

@dav_i: Thích cái này ?
Stefan Näwe

@ StefanNäwe Ah Tôi đã bối rối - quá sớm vào buổi sáng ... đã cập nhật câu trả lời của bạn với liên kết.
dav_i


0

Giống như người bạn VonC của chúng tôi đã nói năm tháng trước, bây giờ có một tính năng mới kể từ phiên bản 2.5.x thực hiện công việc. git worktree .


Nó không giống như những gì tôi đã đề cập 5 tháng trước trong câu trả lời của tôi ở trên ?
VonC

Ops. Bây giờ tôi đang cảm thấy khủng khiếp. Tôi đã không trả tiền cho sự chú ý thích hợp cho điều đó. Lỗi của tôi.

0

Git hỗ trợ nhiều worktree cùng một lúc. Để biết thêm thông tin xem:

Tuy nhiên, rất khó để hỗ trợ nhiều worktree với ID. Ví dụ: đây là một yêu cầu nâng cao trong JGet (ID nhật thực) để hỗ trợ worktree.

Vì vậy, bạn phải quản lý dự án theo cách thủ công (dòng lệnh) với rất nhiều vấn đề hoặc làm việc với một worktree duy nhất trong IDE.


Đến bây giờ, câu trả lời này là không chính xác. Hãy cập nhật câu trả lời.
narendra-choudhary

-2

Không thực sự như Git chỉ hỗ trợ để có một bản sao hoạt động của dữ liệu kho lưu trữ trong thư mục kho lưu trữ.

Nếu bạn muốn cam kết / kéo vào cùng một kho lưu trữ với hai bản sao làm việc khác nhau, bạn có thể tạo một kho lưu trữ trống và sao chép nó vào hai bản sao đang hoạt động .

Bất cứ khi nào bạn đã hoàn thành một cái gì đó, bạn chỉ cần đẩy vào kho lưu trữ trống "chính" .

Một số gợi ý:

man git-clone

git clone --bare


3
"Git chỉ hỗ trợ để có một bản sao hoạt động của dữ liệu kho lưu trữ" -1 Không đúng, xem câu trả lời về git-new-workdir.
sleske

Đó là ý tưởng tốt. Chỉ cần nhân bản nó hai lần.
Serge Vinogradoff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.