如何使用 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.");
}
我使用下面的代码来推送。
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.");
}