Ref 对象的 getPeeledObjectId() 和 getObjectId() 有什么区别?
what is the difference between getPeeledObjectId() and getObjectId() of Ref Object?
我正在使用 jgit api 来实现我项目的构建和部署功能(在本地机器中)。我通过命令提示符通过以下命令提交了整个源代码(java 项目)
git add .
git commit -a -m "Initial_Source"
在这里,我得到的提交 ID 为 cb96c685a5a4338f852a782631df8d1cf5dca21d
git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
[cb96c685a5a4338f852a782631df8d1cf5dca21d 是 commitid]
git push
git push --tags
但是当我尝试通过 getPeeledObjectId() 获取提交 ID 时,它正在返回 null
我的密码是
Ref tag = git.getRepository().getRef("Initial_Source");
Ref peeledRef = git.getRepository().peel(tag);
return peeledRef.getPeeledObjectId(); -- this is returning null
但我尝试使用 getObjectId()
而不是 getPeeledObjectId()
。它正在提供 commitId。但我想知道什么时候使用 getPeelObjectId()
和 getObjectId()
.
那些方法是什么?
getPeeledObjectId() 方法在 non-annotated (lightweight) tag:
上始终为 null
git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
这将适用于带注释的标签
git tag -a Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
# or
git tag -m "Initial Source" Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
由于您的标签是指向 commit(由 git.getRepository().peel(tag)
引用)的指针,getObjectId()
获取其 ID,因此 [=30] 没有任何意义=] 再次:您已经提交了。
参见“What is the difference between an annotated and unannotated tag?”
参见porcelain/ListTags.java
example:它考虑了两种标签:
List<Ref> call = git.tagList().call();
for (Ref ref : call) {
System.out.println("Tag: " + ref + " " + ref.getName() + " " + ref.getObjectId().getName());
// fetch all commits for this tag
LogCommand log = git.log();
Ref peeledRef = repository.peel(ref);
if(peeledRef.getPeeledObjectId() != null) {
// Annotated tag
log.add(peeledRef.getPeeledObjectId());
} else {
// Lightweight tag
log.add(ref.getObjectId());
}
}
- 正如@VonC 所说,我认为我们无法获得轻量级标签的 ObjectId(即
getPeeledObjectId() 中没有 -a 或 -m 的标签。
我尝试提交一个文件并在没有 -a 或 -m 的情况下标记该文件
[git
标签 Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d ].
然后运行一个java主程序从中获取对象ID
getPeeledObjectId() 显然 returns null.
然后我提交一个文件,然后用-a和-m标记它(任何1就足够了
作为注释标签)
[git 标记 Appinterface 523a05f9c486e64eba29786a1b8abfc4da421260 -m "Appinterface_commit_tag"]
现在我从 getPeeledObjectId()
获取 objectId
我正在使用 jgit api 来实现我项目的构建和部署功能(在本地机器中)。我通过命令提示符通过以下命令提交了整个源代码(java 项目)
git add .
git commit -a -m "Initial_Source"
在这里,我得到的提交 ID 为
cb96c685a5a4338f852a782631df8d1cf5dca21d
git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
[cb96c685a5a4338f852a782631df8d1cf5dca21d 是 commitid]
git push
git push --tags
但是当我尝试通过 getPeeledObjectId() 获取提交 ID 时,它正在返回 null
我的密码是
Ref tag = git.getRepository().getRef("Initial_Source");
Ref peeledRef = git.getRepository().peel(tag);
return peeledRef.getPeeledObjectId(); -- this is returning null
但我尝试使用 getObjectId()
而不是 getPeeledObjectId()
。它正在提供 commitId。但我想知道什么时候使用 getPeelObjectId()
和 getObjectId()
.
那些方法是什么?
getPeeledObjectId() 方法在 non-annotated (lightweight) tag:
上始终为 null git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
这将适用于带注释的标签
git tag -a Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
# or
git tag -m "Initial Source" Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
由于您的标签是指向 commit(由 git.getRepository().peel(tag)
引用)的指针,getObjectId()
获取其 ID,因此 [=30] 没有任何意义=] 再次:您已经提交了。
参见“What is the difference between an annotated and unannotated tag?”
参见porcelain/ListTags.java
example:它考虑了两种标签:
List<Ref> call = git.tagList().call();
for (Ref ref : call) {
System.out.println("Tag: " + ref + " " + ref.getName() + " " + ref.getObjectId().getName());
// fetch all commits for this tag
LogCommand log = git.log();
Ref peeledRef = repository.peel(ref);
if(peeledRef.getPeeledObjectId() != null) {
// Annotated tag
log.add(peeledRef.getPeeledObjectId());
} else {
// Lightweight tag
log.add(ref.getObjectId());
}
}
- 正如@VonC 所说,我认为我们无法获得轻量级标签的 ObjectId(即 getPeeledObjectId() 中没有 -a 或 -m 的标签。
我尝试提交一个文件并在没有 -a 或 -m 的情况下标记该文件
[git 标签 Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d ].
然后运行一个java主程序从中获取对象ID getPeeledObjectId() 显然 returns null.
然后我提交一个文件,然后用-a和-m标记它(任何1就足够了 作为注释标签)
[git 标记 Appinterface 523a05f9c486e64eba29786a1b8abfc4da421260 -m "Appinterface_commit_tag"]
现在我从 getPeeledObjectId()
获取 objectId