如何使用GitPython为特定的提交打标签

3
我已经创建了一个简单的脚本,该脚本使用GitPython来标记特定分支上最新的提交,该分支已经被检出。
from git import Repo

def TagRepo(path, tag):
    repo = Repo(path)
    repo.create_tag(tag)
    repo.remotes.origin.push(tag)


if __name__ == "__main__":

    parser = optparse.OptionParser('usage: %prog [options] ')
    parser.add_option('-p', '--path', dest='path', help='path to repo')
    parser.add_option('-t', '--tag', dest='tag', help='Tag label')

    (options, args) = parser.parse_args()

    TagRepo(options.path, options.tag)

我希望改进它,这样我就可以传递一个特定的提交SHA和标签,而不是分支上最新的提交,但我无法看到如何使用GitPython完成这个任务。


如果您提供了特定的SHA,为什么还需要标签呢?它们可以互换使用。 - Chen A.
当我想要定位与发布相关的提交时,我更愿意寻找版本号为1.2.3而不是a11bef06a3f659402fe7563abf99ad00de2209e6。 - Joe Smith
只是一点小提示:不要使用Optparse,它已被标记为弃用,并且可能不包含在py3中。 - Ciasto piekarz
2个回答

1

模块的文档中:

获取指定版本的提交记录

    repo.commit('master')
    repo.commit('v0.8.1')
    repo.commit('HEAD~10')

因此,要检索特定的提交,请使用repo.commit('SHA-1')


谢谢,我会尝试的。 - Joe Smith

0

从源代码:

def create_tag(self, path, ref='HEAD', message=None, force=False, **kwargs)

看起来你可以传递一个 ref 到 create_tag,根据下一行的注释描述:

:param ref: 你想要打标签的对象的引用。它可以是提交、树或 blob。

所以只需获取你想要的提交并将其作为 ref 传递即可。不要忘记像 OP 一样推送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接