使用JGit承诺并推送GitHub - Bare Repo?

时间:2011-11-22 21:57:11

标签: java git github jgit

今天我注册了github,并使用此处描述的技术将现有的文件系统转换为git repo:

http://crashingdaily.wordpress.com/2009/09/02/initing-a-new-remote-git-repository-with-existing-files/

最重要的是(我认为)它涉及这一行:

git --bare init

然后我按照github.com的其余设置教程(这是其中的一部分)完成了。现有的文件系统在Dropbox中,所以我在另外两台使用文件系统的机器上执行相同的设置(现在是一个git repo)。

今晚我试图让JGit添加一个文件,提交然后推送它。这是代码的要点直到它破裂:

FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder.setGitDir(new File("path/to/my/repo"))
          .readEnvironment() // scan environment GIT_* variables
          .findGitDir() // scan up the file system tree
          .build();

    Git git = new Git(repository);
    AddCommand add = git.add();
    try{
        add.addFilepattern("PlayState.as").call();`

这基本上是从JGit教程中逐字逐句采用的。它在最后引用的行引发异常并声明:

org.eclipse.jgit.errors.NoWorkTreeException: Bare Repository has neither a working tree, nor an index
at org.eclipse.jgit.lib.Repository.getIndexFile(Repository.java:838)
at org.eclipse.jgit.lib.Repository.lockDirCache(Repository.java:886)
at org.eclipse.jgit.api.AddCommand.call(AddCommand.java:136)
at flipa.FLIPAGame.writeToFlixel(FLIPAGame.java:77)
at flipa.FLIPAGame.main(FLIPAGame.java:58)

现在,我并不是说声称这是不合理的,因为真相被告知我不是版本控制的最好朋友。我得到一个简单的回购是一个只有git in而没有其他文件,但在我看来,现在它有文件。我已经使用终端中的git手动添加,提交并推送到github。所以我无法立即明白为什么它甚至不会识别回购。

任何参赛者?

编辑 - 为了澄清,如果有人可以提出另一个解决方案,那么杀掉这个回购并不是什么大不了的事。我想要一个git repo来使用我的Dropbox中的文件系统,并且能够通过Java提交github。

4 个答案:

答案 0 :(得分:8)

对于你的代码,我会说选项setGitdir()和findGitDir()不应该同时使用。 要检索现有的存储库,我使用findGitDir(新文件(“path / to / my / repo”)就足够了。

答案 1 :(得分:2)

这听起来像是您已将文件添加到裸存储库中。除非通过git push和pull命令(或一般的git命令),否则不应触及裸存储库。作为指南,我从不查看我的裸库。

它应该用作中心位置。一旦你创建了git bare repo,就应该克隆它,然后从克隆中进行处理,从克隆中推送和拉出。

$ cd /dropbox/repo
$ git init --bare
$ cd /workdir
$ git clone file:///dropbox/repo
$ add files in here
$ git add .
$ git commit -m "initial version"
$ git push origin master
$ more changes here
$ git add etc.

这和github之间的区别是git clone,它来自不同的地方。说实话,除非你有一个很好的理由要有本地副本,否则我会忘记Dropbox repo并只使用github。

答案 2 :(得分:0)

你的第三行代码,就在.build()之后;应该是:

repository.create();

这相当于“git init”命令。

答案 3 :(得分:0)

对于您而言,由于您正在使用现有目录,因此使用Git.open()可能会更方便。

Git git = Git.open(new File(".git"));

System.out.println("Repository: " + git.getRepository().toString());

//Do some git action for instance:
RevCommit rev = git.commit().setAmend(true)
               .setAuthor("me", "me@mail.com")
               .setMessage("Testing commit from jGit").call();

git.close();

来源:RüdigerHerrmann撰写的文章,可在Code Affine中找到。