如何使用 jgit API 进行 gitpush?

How to do gitpush using jgit API?

我使用下面的代码来推送。

 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”文件夹中生成配置文件,我无法理解。

您的代码中有几行不正确。一起来看看吧

打开 Git 存储库

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

来证明这一点
Repository localRepo = new FileRepository("C:\Users\Joshi\Desktop\demo");
System.out.println(localRepo.isBare()); // true

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

org.eclipse.jgit.api.errors.WrongRepositoryStateException: Cannot commit on a repo with state: BARE

更好的方法是使用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-command.

中精确指定远程分支名称
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.");
}