2012-10-04 13 views
12

Tôi đã thử nhiều cách để sao chép một repo bằng jGit (nó hoạt động). Sau đó, tôi viết một số kho lưu trữ trong kho lưu trữ và cố gắng thêm tất cả (một số git add *, git add -A hoặc thứ gì đó tương tự) .. nhưng nó không hoạt động. Các tệp đơn giản không được thêm vào vùng dàn dựng.jGit - cách thêm tất cả các tệp vào khu vực dàn dựng

Mã của tôi là như thế này:

FileRepositoryBuilder builder = new FileRepositoryBuilder(); 
    Repository repository = builder.setGitDir(new File(folder)) 
      .readEnvironment().findGitDir().setup().build(); 
    CloneCommand clone = Git.cloneRepository(); 
    clone.setBare(false).setCloneAllBranches(true); 
    clone.setDirectory(f).setURI("[email protected]:test.git"); 
    try { 
     clone.call(); 
    } catch (GitAPIException e) { 
     e.printStackTrace(); 
    } 
    Files.write("testing it...", new File(folder + "/test2.txt"), 
      Charsets.UTF_8); 
    Git g = new Git(repository); 
    g.add().addFilepattern("*").call(); 

Tôi đang làm gì sai? Cảm ơn.


ngoại lệ khi cố gì với addFilePattern (""):

Exception in thread "main" org.eclipse.jgit.errors.NoWorkTreeException: Bare Repository has neither a working tree, nor an index 
    at org.eclipse.jgit.lib.Repository.getIndexFile(Repository.java:850) 
    at org.eclipse.jgit.dircache.DirCache.lock(DirCache.java:264) 
    at org.eclipse.jgit.lib.Repository.lockDirCache(Repository.java:906) 
    at org.eclipse.jgit.api.AddCommand.call(AddCommand.java:138) 
    at net.ciphersec.git.GitTests.main(GitTests.java:110) 

Trả lời

17

Một cách dễ dàng để gỡ lỗi này là để nhìn vào các bài kiểm tra của AddCommand trong JGit repo: AddCommandTest.java

Bạn sẽ thấy rằng để thêm tất cả các tệp, mẫu "*" không bao giờ được sử dụng, nhưng "." là.
Và nó được sử dụng trong hàm kiểm tra tên ... testAddWholeRepo()

git.add().addFilepattern(".").call(); 

Các ngoại lệ (!):

Exception in thread "main" org.eclipse.jgit.errors.NoWorkTreeException: 
Bare Repository has neither a working tree, nor an index 

là khá rõ ràng: bạn cần phải thêm tập tin trong một repo phi trần .

Xem test method testCloneRepository() để so sánh với bản sao của riêng bạn và xem có sự khác biệt nào không.

+0

cảm ơn, nhưng tôi có ngoại lệ. Tôi sẽ đặt nó trong câu hỏi – caarlos0

+0

@ caarlos0 câu trả lời chỉnh sửa – VonC

+0

Nhưng tôi sao chép nó như là một kho không trần ... Tôi không undestand những gì tôi phải làm điều đó ... – caarlos0

1

Nó có thể là ký tự đại diện, tôi chỉ đọc javadoc cho add lệnh, có vẻ như bạn gửi tên của một thư mục để thêm nội dung của nó không phải là một thẻ hoang dã:

addFilepattern 

public AddCommand addFilepattern(String filepattern) 

Tham số: filepattern - Tệp để thêm nội dung từ. Cũng là thư mục hàng đầu có tên (ví dụ: dir để thêm dir/file1dir/file2) có thể được thêm để thêm tất cả tệp vào thư mục, đệ quy. Fileglobs (ví dụ: *.c) chưa được hỗ trợ .

3

Tôi có một tình huống mà tôi phải di chuyển tệp f1 từ thư mục hiện tại sang thư mục khác có tên 'temp'. .. Sau khi di chuyển các tập tin, gọi git.add() addFilePattern ("") gọi() hành động theo một cách kỳ lạ kể từ khi tình trạng git cho kết quả sau:

Changes to be committed: 
    (use "git reset HEAD <file>..." to unstage) 

    new file: temp/f1.html 

Changes not staged for commit: 
    (use "git add/rm <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    deleted: f1.html 

Nó nhận ra rằng một tập tin temp mới/f1 đã được tạo nhưng không phát hiện thấy tệp đã bị xóa trước.Điều này có lẽ bởi vì di chuyển các tập tin có thể được nhìn thấy như sau

  • Xóa/Cắt các tập tin f1
  • Tạo một thư mục có tên tạm thời
  • Tạo/Dán các tập tin f1

Sau đó, tôi đến trên số setUpdate(true) tìm kiếm các bản cập nhật cho các tệp đang được theo dõi và sẽ không tạo các tệp mới. (Kiểm tra java-doc để biết thêm)

Vì vậy, tôi đã phải thay đổi mã của tôi để hai dòng như vậy để cho git để nhận ra cả hai tập tin bổ sung và sửa đổi (trong đó bao gồm xóa):

git.add().addFilepattern(".").call(); 
git.add().setUpdate(true).addFilepattern(".").call(); 

git trạng thái hiện cung cấp kết quả mong đợi:

renamed: f1.hml -> temp/f1.html 
Các vấn đề liên quan