2012-10-17 40 views
15

Tôi đang sử dụng JGit để thanh toán chi nhánh theo dõi từ xa.JGit: Thanh toán chi nhánh từ xa

Git binrepository = cloneCmd.call() 

CheckoutCommand checkoutCmd = binrepository.checkout(); 
checkoutCmd.setName("origin/" + branchName); 
checkoutCmd.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK); 
checkoutCmd.setStartPoint("origin/" + branchName); 

Ref ref = checkoutCmd.call(); 

Tệp được kiểm tra, nhưng HEAD không trỏ đến nhánh. Tiếp theo là git status đầu ra,

$ git status 
# Not currently on any branch. 
nothing to commit (working directory clean) 

Các hoạt động tương tự có thể được thực hiện trong dòng lệnh git, dễ dàng và nó hoạt động,

git checkout -t origin/mybranch 

Làm thế nào để làm JGit này?

Trả lời

19

Bạn phải sử dụng setCreateBranch để tạo ra một chi nhánh:

Ref ref = git.checkout(). 
     setCreateBranch(true). 
     setName("branchName"). 
     setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK). 
     setStartPoint("origin/" + branchName). 
     call(); 

lệnh đầu tiên của bạn là tương đương với git checkout origin/mybranch.

(Edit: Tôi đã gửi một bản vá để JGit để cải thiện tài liệu của CheckoutCommand: https://git.eclipse.org/r/8259)

+0

Tôi đã thử nó. nó hoạt động. một giải pháp đơn giản của nó. Tôi cần phải thực hiện thay đổi, cam kết và đẩy tới điều khiển từ xa. Tôi sẽ kiểm tra và cập nhật chủ đề. – Nambi

+0

Câu trả lời đầy đủ hơn tôi. +1 – VonC

+0

Mã trên sẽ không hoạt động với thẻ git, quyền? –

4

Như được hiển thị trong mã số CheckoutCommand, bạn cần đặt boolean createBranch thành true để tạo chi nhánh địa phương.

Bạn có thể thấy một ví dụ trong CheckoutCommandTest - testCreateBranchOnCheckout()

@Test 
public void testCreateBranchOnCheckout() throws Exception { 
    git.checkout().setCreateBranch(true).setName("test2").call(); 
    assertNotNull(db.getRef("test2")); 
} 
+0

tốt ý tưởng này để liên kết để kiểm tra các trường hợp, 1 :) – robinst

3

Đối với bất cứ lý do nào, mã mà robinst gửi không làm việc cho tôi. Đặc biệt, nhánh địa phương được tạo ra không theo dõi nhánh từ xa. Đây là những gì tôi đã sử dụng mà làm việc cho tôi (sử dụng jgit 2.0.0.201206130900-r):

git.pull().setCredentialsProvider(user).call() 
git.branchCreate().setForce(true).setName(branch).setStartPoint("origin/" + branch).call(); 
git.checkout().setName(branch).call() 
+0

Điều này phải được chấp nhận trả lời. Hai giải pháp khác không hoạt động. –

1

bạn cũng có thể giống như

git.checkout().setName(remoteBranch).setForce(true).call(); 
       logger.info("Checkout to remote branch:" + remoteBranch); 
       git.branchCreate() 
        .setName(branchName) 
        .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM) 
        .setStartPoint(remoteBranch) 
        .setForce(true) 
        .call(); 
       logger.info("create new locale branch:" + branchName + "set_upstream with:" + remoteBranch); 
       git.checkout().setName(branchName).setForce(true).call(); 
       logger.info("Checkout to locale branch:" + branchName); 
Các vấn đề liên quan