使用jGit将文件推送到远程代码库

3

我需要使用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个回答

2
你可能需要添加该文件的路径(而不仅仅是文件名),就像这个例子中一样。最初的回答
adder.addFilepattern(getPath(fileVersion.getFile(), repository));

路径可以相对于代码库(参考答案),所以在你的情况下是<group 1>。最初的回答。

其他指令都没问题吧?我初始化 git 仓库的方式正确吗?应该会有一个 .git 文件,对吧?而且我该如何检查我的本地仓库的根目录在哪里? - Kyrix
将@Kyrix从不同的本地存储库推送到托管在GitHub上的一个远程存储库。我错过了这一部分:只有一个本地存储库可以推送到一个远程存储库。在您的情况下,您需要使用要添加的文件的绝对路径。 - VonC
更新:我从示例中复制了getPath方法,并像这样使用它https://pastebin.com/ZmV5kj0G,感谢您的帮助,我很沮丧。 - Kyrix
我有一个问题,每个本地仓库都与某个ID或其他东西相关联吗?因为当我创建一个本地仓库时,它会提交到GitHub(我在GitHub上看到提交),但没有文件。当我删除本地仓库并使用相同的名称创建另一个本地仓库时,不会进行任何提交。 - Kyrix
@Kyrix 本地仓库只能通过其 git remote -v URL 链接到远程仓库:您只需要一个本地仓库,因为您将在那里进行的提交历史必须与远程仓库的相同并完整的提交集匹配。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接