2010-01-12 6 views
112

Tôi có một dự án với nhiều chi nhánh.git làm việc trên hai nhánh cùng một lúc

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?

+0

bản sao có thể có của [Nhiều thư mục làm việc với Git?] (Http://stackoverflow.com/questions/6270193/multiple-working-directories-with-git) – meagar

+1

Git 2.5+ (Q2 2015) sẽ chính thức hỗ trợ việc này với lệnh mới 'git checkout --to = '. Xem [câu trả lời của tôi dưới đây] (http://stackoverflow.com/a/30186843/6309). – VonC

+1

Trên thực tế, lệnh sẽ là 'git worktree thêm []' (Git 2.5 rc2) – VonC

Trả lời

92

Git 2.5+ (Q2 2015) sẽ hỗ trợ tính năng đó: Khi bạn đã sao chép một repo git, bạn sẽ có thể thanh toán nhiều chi nhánh trong đường dẫn khác nhau bằng lệnh mới git worktree add <path> [<branch>].

Thay thế tập lệnh cũ hơn contrib/workdir/git-new-workdir, với cơ chế mạnh mẽ hơn nơi cây "liên kết" được ghi lại trong thư mục chính mới $GIT_DIR/worktrees (để hoạt động trên mọi hệ điều hành, 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 con đường độc lập khác nhau (/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 tùy chọn --git-dir nữa)

Xem thêm tại "Multiple working directories with Git?".

+1

Đây phải là câu trả lời được chấp nhận mới, kể từ 2.5.X bây giờ là phiên bản được đề xuất, ngay cả đối với các cửa sổ http://i.imgur.com/oQvUhVl.png https://git-scm.com/download/win – RAnders00

-1

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

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

Bất cứ khi nào bạn đã hoàn thành nội dung nào đó, bạn chỉ cần đẩy tới kho chính "chính".

Một số gợi ý:

man git-clone

git clone --bare

+3

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

+0

Đó là ý tưởng hay. Chỉ cần sao chép nó hai lần. –

39

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

một tập lệnh đơn giản để tạo thư mục hoạt động sử dụng liên kết tượng trưng đến trỏ tại một kho lưu trữ hiện có. Điều này cho phép có các chi 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ữ .

+0

Và tương tự: http://stackoverflow.com/questions/655202/git-and-c-workflow-how-to-handle-object-and-archive-files/1889179#1889179 – Tobu

+3

@Stefan, Đây là thú vị nhất kể từ khi bánh mì trượt. –

+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. –

0

Tôi đề nghị kịch bản nhỏ của tôi http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html

Nó sẽ làm git clone và thay thế các cấu hình (để "nhìn" tại repo gốc, do đó kéo/đẩy sẽ đi vào "chính" repo) về cơ bản, nhưng nó đủ đơn giản để phục vụ sự trừu tượng từ việc khởi động thực tế.

0

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

thế nào bao giờ nó là rất khó để hỗ trợ nhiều worktree với ID. Ví dụ: đây là enhancement request 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 nhiều sự cố hoặc làm việc với một worktree đơn trong IDE.

+0

Hiện tại, câu trả lời này không chính xác. Vui lòng cập nhật câu trả lời. –

0

Giống như người bạn của chúng tôi VonC đã nói cách đây năm tháng, hiện 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.

+0

Isn 'nó 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] (http://stackoverflow.com/a/30186843/6309)? – VonC

+0

Ops. Bây giờ tôi cảm thấy khủng khiếp. Tôi đã không chú ý đến điều đó. Lỗi của tôi. –