使用jGit

时间:2019-08-04 20:15:56

标签: java git jgit

我需要使用jGit以编程方式将文件从不同的本地存储库推送到Github上托管的一个远程存储库。下面的代码无一例外地起作用,但是Github中没有任何改变。

程序中每个用户定义的“组”在另一个名为“ data”的文件夹下都有自己的文件夹。每个组文件夹都包含一个名为repo的文件夹,其中包含一个html和css文件。在适当的时候,我需要将这两个文件推送到github。

这是文件夹的结构:

program (folder)
     [reciter.jar]
     [start.bat]
     data (folder)
          <group 1> (group folder)
               repo (group specific repository folder)
                    [resultsFile.html]
                    [styleFile.css]
          <another group> (group folder)
               ... (omitted)

这是我需要做的: 我想将一个存储库设为一个Github。 (完成:https://github.com/Skultrix/reciter.git)当一个小组将其文件推送到Github时,我需要它们按以下顺序排列:

github's root
     <group 1>
          resultsFile.html
          styleFile.css
     <another group>
          resultsFile.html
          styleFile.css

意思是,如果我要访问“另一个组”的html文件,则路径为another_group / results.html。

这是我使用jGit尝试过的方法:

    public void load() {
        try {
            git = Git.init().setGitDir(group.getDataManager().getRepoDirectory()).call();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //load() is always before sendFile()
    public void sendFile() {
        LoadingModal.showModal(main, () -> {
            try {
                System.out.println("adding");
                git.add()
                        .addFilepattern("resultsFile.html")
                        .call();
                System.out.println("commiting");
                git.commit()
                        .setAll(true)
                        .setMessage("Update results")
                        .call();
                System.out.println("remote adding");
                git.remoteAdd()
                        .setName("origin")
                        .setUri(new URIish("https://github.com/Skultrix/reciter.git"))
                        .call();
                System.out.println("pushing");
                git.push()
                        .setRemote("https://github.com/Skultrix/reciter.git")
                        .setCredentialsProvider(
                                new UsernamePasswordCredentialsProvider("skultrix", <my password>)
                        )
                        .call();
                System.out.println("finish");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }, "Uploading results to site.", true).run();
    }

执行上述代码(#sendFile)后,控制台将打印:

adding
commiting
remote adding
pushing
finish

但是当我检查github时,什么都没有改变,甚至没有空的提交。也没有例外或错误。

感谢您的任何帮助或指导。

1 个答案:

答案 0 :(得分:0)

您可能需要添加该文件的 path (而不仅仅是其名称),为in this example

https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example

路径可以是relative to the repository,所以adder.addFilepattern(getPath(fileVersion.getFile(), repository)); 是您的情况。