代码之家  ›  专栏  ›  技术社区  ›  NikitaJ

如何使用jgit API进行gitpush?

  •  2
  • NikitaJ  · 技术社区  · 6 年前

    我用过下面的 密码 进行推送。

     public static void main(String[] args) throws IOException,GitAPIException
    { 
      Repository localRepo = new 
      FileRepository("C:\\Users\\Joshi\\Desktop\\demo");
      Git git = new Git(localRepo);
    
    // add remote repo:
      RemoteAddCommand remoteAddCommand = git.remoteAdd();
      remoteAddCommand.setName("origin");
      try {
        remoteAddCommand.setUri(new 
        URIish("https://bitbucket.org/nidhi011/bxc"));
        System.out.println("file Added");
        } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // you can add more settings here if needed
    remoteAddCommand.call();
    git.commit().setMessage( "commited" ).call();
    
    // push to remote:
    PushCommand pushCommand = git.push();
    pushCommand.setCredentialsProvider(new UsernamePasswordCredentialsProvider("username", "password"));
    // you can add more settings here if needed
    pushCommand.call();
    }
    

    还有我的 错误

    file Added
    
    Exception in thread "main" 
    org.eclipse.jgit.api.errors.WrongRepositoryStateException: Cannot commit on 
    a repo with state: BARE
    at org.eclipse.jgit.api.CommitCommand.call(CommitCommand.java:171)
    at maven_git.push.main(push.java:38)
    

    运行上述代码后,我得到了这个异常错误,请帮助我解决jgit push命令。是的,还有一件事,当我执行这段代码时,它会在我的本地目录“demo”文件夹中生成配置文件,我无法理解这一点。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mincong Huang    6 年前

    代码中有几行不正确。让我们一起看看。

    打开Git存储库

    使用打开Git存储库 FileRepository 这很棘手。这是一个内部API,其中给定的字符串是存储库元数据( .git 文件夹)。换句话说,它用于构建Git裸存储库。你可以打电话给 Repository#isBare() :

    Repository localRepo = new FileRepository("C:\\Users\\Joshi\\Desktop\\demo");
    System.out.println(localRepo.isBare()); // true
    

    使用此API后,创建的存储库是一个裸存储库。你 不能 提交到裸存储库,因为它没有工作区。这就是为什么你会说:

    组织。日食jgit。api。错误。ErrorRepositoryStateException:无法在上提交 国家回购:裸

    更好的方法是使用 Git#open() 。请注意,您应该在使用Git存储库之后关闭它。所以我在这里使用try with resources语句:

    try (Git git = Git.open(new File("C:\\Users\\Joshi\\Desktop\\demo"))) {
        // Add your logic here ...
    }
    

    将文件添加到Git

    在提交更改之前,需要将其添加到索引中,以便为下一次提交准备暂存的内容。例如:

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

    请注意,这与 RemoteAddCommand :我们正在添加文件内容,而 RemoteAddCommand 添加新的远程URL。在本机Git命令中,它们分别是:

    git add .
    git remote add origin https://bitbucket.org/nidhi011/bxc
    

    犯罪

    这部分你说得对。

    如果本地分支未从签出 tracking branch ,则需要在push命令中精确指定远程分支名称。

    git.push().setRemote("origin").add("master").call();
    

    如果凭据不正确,用户将无权推动更改。在这种情况下 TransportException 将被抛出。您可以为异常处理添加其他逻辑:

    try {
        git.push().setRemote("origin").add("master").call();
    } catch (TransportException e) {
        // Add your own logic here, for example:
        System.out.println("Username or password incorrect.");
    }