- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码来进行推送。
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”文件夹中生成配置文件,我无法理解。
最佳答案
您的代码中有几行不正确。一起来看看吧。
使用 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.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/
我使用下面的代码来进行推送。 public static void main(String[] args) throws IOException,GitAPIException { Reposi
我是一名优秀的程序员,十分优秀!