1

svnversion文档:

[adrdec@opsynxvm0081 common_cpp]$ svnversion --help
usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]

为工作副本路径
WC_PATH 生成一个紧凑的“版本号”。例如:

$ svnversion . /repos/svn/trunk
4168

如果工作副本是单个修订版、未修改、未切换并且具有与 TRAIL_URL 参数匹配的 URL,则版本号将是单个数字。如果工作副本异常,版本号会更复杂:

   4123:4168     mixed revision working copy
   4168M         modified working copy
   4123S         switched working copy
   4123P         partial working copy, from a sparse checkout
   4123:4168MS   mixed revision, modified, switched working copy
4

2 回答 2

3

此解决方案像 svnversion 一样检测工作目录中的更改。

    def get_version(self, path):
            curdir = self.get_cur_dir()
            os.chdir(path)
            version = self.execute_command("git log --pretty=format:%H -n1")[self.OUT].strip()  #get the last revision and it's comment
            status = self.execute_command("git status")[self.OUT].strip()  #get the status of the working copy
            if "modified" in status or "added" in status or "deleted" in status:
                    version += self.modified
            os.chdir(curdir)
            return version


    def execute_command(self, cmd_list):
            proc = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, shell=True)
            (out, err) = proc.communicate()
            rc = proc.returncode
            return rc, out, err   
于 2012-08-24T05:08:39.310 回答
1

我对 SVN 不是很熟悉,但据我所知,SVN 以简单数字的形式识别修订:1、2、3……Git 的翻译不太好,因为它使用 SSH 哈希来识别修订(在 Git 世界中称为“提交”)。但是,使用以下命令仍然非常简单git log

git log --pretty="format:%h" -n1 HEAD

这会在 repo 中打印当前签出的提交(这就是 HEAD)。或者,您可以HEAD在命令中替换为master(或任何其他分支,就此而言)以获取该分支的最后一次提交,而不是代表您的工作目录的那个。此外,如果您需要完整的 SHA1,请将%h上面替换为%H. 您还可以阅读git-log手册页以了解有关--pretty格式的更多信息。

此外,您可以在任何地方添加别名.gitconfig来执行此操作。将以下行添加到~/.gitconfig[alias]如果您.gitconfig已经有该部分,请不要添加):

[alias]
    rev = "git log --pretty='format:%h'"

现在,只要您在 Git 存储库中并且想要查看当前版本,只需键入git rev.

于 2012-08-24T02:09:22.113 回答