- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个裸仓库位于 main.git
并试图在另一个仓库 foo
中获取一个分支(比方说 test
) , 这刚刚是 git init
'd:
fetchtest/
|- main.git/
|- test/
|- .git/
使用常规的 git 命令,我可以执行 git fetch ../main.git foo:foo
这将创建一个新分支 foo
在 test/
并获取分支所需的对象。 然后我想做同样的事情,但以编程方式使用 JGit,即不使用 git CLI,而是仅使用 Java 代码。我无法使用 git CLI:
Git git = Git.init().setDirectory(new File("fetchtest/test/")).call();
git.fetch().setRemote(new File("../main.git"))
.setRefSpecs(new RefSpec("foo:foo"))
.call();
但它只是错误:
org.eclipse.jgit.api.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137)
// ......
Caused by: org.eclipse.jgit.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.transport.FetchProcess.expandSingle(FetchProcess.java:349)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:139)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:113)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1069)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128)
我如何让它工作?
最佳答案
什么应该起作用:
Git git = Git.init().setDirectory(new File("fetchtest/test/")).call();
git.fetch().setRemote(new File("../main.git"))
.setRefSpecs(new RefSpec("refs/heads/foo:refs/heads/foo"))
.call();
注意 RefSpec
定义。
至少,在你的例子中尝试:
new RefSpec("refs/heads/foo:refs/heads/foo")
/**
* Parse a ref specification for use during transport operations.
* <p>
* Specifications are typically one of the following forms:
* <ul>
* <li><code>refs/head/master</code></li>
* <li><code>refs/head/master:refs/remotes/origin/master</code></li>
* <li><code>refs/head/*:refs/remotes/origin/*</code></li>
* <li><code>+refs/head/master</code></li>
* <li><code>+refs/head/master:refs/remotes/origin/master</code></li>
* <li><code>+refs/head/*:refs/remotes/origin/*</code></li>
* <li><code>:refs/head/master</code></li>
* </ul>
*
* @param spec
* string describing the specification.
* @throws IllegalArgumentException
* the specification is invalid.
*/
所以“refs/head/
”似乎是强制性的。
原答案:
setRemote()
function on api.FetchCommand
采用名称或 URI。
并查看 FetchCommandTest
URI 定义,我更喜欢让远程更可见:
我宁愿为您的第二个存储库(引用您的第一个存储库)定义一个命名的远程(如下:“test
”),然后获取。
// setup the first repository to fetch from the second repository
final StoredConfig config = db.getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(db2.getDirectory().toURI().toURL());
remoteConfig.addURI(uri);
remoteConfig.update(config);
config.save();
// create some refs via commits and tag
RevCommit commit = git2.commit().setMessage("initial commit").call();
Ref tagRef = git2.tag().setName("tag").call();
Git git1 = new Git(db);
RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.fetch().setRemote("test").setRefSpecs(spec)
.call();
关于java - 使用 jgit : Remote does not have <branchname> available for fetch 获取 Git 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304261/
最好在示例中进行解释:我在存储库的分支 0.58 上,这是他的 pull 方式: git pull origin 0.58 当我调用“git pull”时,我得到: ip238:openlierox
当我输入 git branch 时,我得到了 * master localbranch 但是当我尝试删除分支时,git branch -d localbranch,我得到一个未找到的错误: error
我在 GitHub 上创建了一个 repo。从网站创建了一个新分支(名为“anythingslider”)。 然后: cd /home/multiformeingegno git clone git@
这个问题在这里已经有了答案: What is the difference between "git branch" and "git checkout -b"? (7 个答案) 关闭 7 年前。
这个问题在这里已经有了答案: Ramifications of forgetting slash in "git merge origin/branch" (1 个回答) 关闭 8 年前。 请注意命
我搜索了一下,但似乎找不到答案。 在我可以访问的两个盒子上,当我执行“git push --dry-run origin mytestbranch”时,我得到以下结果: To git@bitbucke
我正在使用 visual studio online 和 git 进行一个项目。 我尝试访问 TFS Online 网站并打开我正在处理的项目的源代码,但我发现这个错误无处不在: TF401175:版
我正在尝试从远程标签创建一个分支,但似乎没有办法做到这一点。当我尝试 git checkout -b test origin/deploy origin 是远程的,deploy 是我想检查的标签,但是
我需要提交并推送我的代码。但是在 git 扩展中,在尝试推送代码时,我遇到了一个错误,我不小心点击了一个按钮,我的代码消失了。我去了 git extension log 并检查了执行的命令。 chec
我已经克隆了一个大型的、维护良好的存储库。我在 checkout 不同的分支时偶然使用了 -b 标志。 Git 说“切换到新分支”。先前存在的分支是否被覆盖,git 的输出是否具有误导性,还是我犯了另
我是 Git 的新手。 我正在创建一个分支,然后想将它推送到 origin。 我认为只需发出 git push(站在我的分支上)就足够了。 这样做是否可能/合理(通过指定 push.default s
这是我当前的 git-svn 工作流程: git checkout -b feature master # hack commit hack commit git checkout master gi
当我尝试使用 git push origin :branchname 推送到远程 git 分支以将其删除时,我收到以下错误消息: error: unable to push to unqualifie
解释起来有点棘手,但在 Azure Pipelines 中,如果您有针对 pull 请求的构建验证策略,则构建管道将运行并具有以下变量: System.PullRequest.SourceBranch
如果我们 check out 一个提交名称而不是分支名称会发生什么? 最佳答案 我不同意那些说“它们是一样的”或“不会发生任何坏事”之类的答案。 它们在一个重要方面明显不同。安塔克describe
解释起来有点棘手,但在 Azure Pipelines 中,如果您有针对 pull 请求的构建验证策略,则构建管道将运行并具有以下变量: System.PullRequest.SourceBranch
如果我们 check out 一个提交名称而不是分支名称会发生什么? 最佳答案 我不同意那些说“它们是一样的”或“不会发生任何坏事”之类的答案。 它们在一个重要方面明显不同。安塔克describe
我有一个裸仓库位于 main.git并试图在另一个仓库 foo 中获取一个分支(比方说 test) , 这刚刚是 git init 'd: fetchtest/ |- main.git/ |-
我正在使用 bitbucket 管道,并希望通过 bitbucket 管道在 AWS 上进行部署。我正在使用 OIDC 连接。我想提出一个条件,即部署必须只发生在“主”分支上。在我的 IAM 角色中,
我在尝试弄清楚为什么分支机构在 TeamCity 中构建时遇到问题时遇到了更糟糕的时间。分支 A(主)正在正确构建,但提交后的分支 B(子)不是。 我已经移动了两个文件并仅在 cshtml 和 js
我是一名优秀的程序员,十分优秀!