gpt4 book ai didi

java - 如何使用 jgit API 进行 gitpush?

转载 作者:行者123 更新时间:2023-12-05 04:06:56 25 4
gpt4 key购买 nike

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

 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仓库。您不能提交到裸存储库,因为它没有工作区。这就是为什么你有异常(exception)说:

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。在 native Git 命令中,它们分别是:

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

提交

你对这部分是正确的。

推送

如果本地分支没有从 tracking branch checkout ,那么您需要在推送命令中精确指定远程分支名称。

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.");
}

关于java - 如何使用 jgit API 进行 gitpush?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com