我有一个常规的长SHA-1哈希字符串.我想获得最短的明确的SHA-1哈希字符串版本.也就是说,我将通过使用得到的git log -1 --pretty=format:%h,假设长哈希指的是最后一次提交.
我发现很难围绕Git如何创建完全独特的哈希,即使在前4个字符中也不允许相同的哈希.我只能使用前四个字符在Git Bash中调用提交.是否在算法中明确决定第一个字符是"超" - 唯一且不会与其他类似的哈希冲突,或者算法是否以相同的方式生成哈希的每个部分?
我正在 GitHub 中创建一个工作流,它创建并使用一个 docker 图像。因此,我使用此 docker 映像的全局环境变量启动了我的工作流文件,该环境变量对我的工作流中的所有作业都可见:
name: continuous integration
on:
push:
branches:
- '**'
env:
IMAGE: docker.pkg.github.com/${{ github.repository }}/jactor-persistence:${{ github.sha }}
Run Code Online (Sandbox Code Playgroud)
我想${{ github.sha }}用head commit的short sha替换,和下面命令的结果一样git rev-parse --short HEAD
这可能吗?
我正在尝试将我们的构建名称设置为...
$(BuildDefinitionName)_$(versionMajor).$(versionMinor).$(versionPatch)+$(SourceBranchName).$(SourceVersion) 例如
OurBigLibraryCI_1.2.3+master.10bbc577
但是我找不到任何包含提交哈希的“短”(7 位)版本的预定义变量。$(SourceVersion)保存完整的 SHA-1 哈希值。
如何在基于 yaml 的管道中缩短它?
长SHA可以得到如下:
repo = git.Repo(search_parent_directories=True)
sha = repo.head.object.hexsha
Run Code Online (Sandbox Code Playgroud)
短的怎么样?(简称SHA由回购的规模决定,所以它不应该像sha[:7])
我想介绍从Git中的版本中获取的版本控制常量.我知道如何做到这一点 - 在svn中以一种非常强硬的方式 -
有关如何使用Git执行此操作的任何想法?
我想使用UUID作为标识符,提供前8位数字以确定它是否存在于数据库中.
通常我可以毫无问题地做到这一点:
select * from TABLE where id = 'e99aec55-9e32-4c84-aed2-4a0251584941'::uuid
但这给了我错误:
select * from TABLE where id LIKE 'e99aec55%@'::uuid
错误:
ERROR: invalid input syntax for uuid: "e99aec55%@"
LINE 1: select * from TABLE where id LIKE 'e99aec55...
^
Query failed
PostgreSQL said: invalid input syntax for uuid: "e99aec55%@"
Run Code Online (Sandbox Code Playgroud)
有没有办法在postgresql中查询UUID类型的前n位数?
该--abbrev-commit标志可以与git log和一起使用,git rev-list以显示部分前缀,而不是提交对象的完整40个字符的SHA-1哈希值.根据Pro Git的书,
它默认使用七个字符,但如果有必要使它们更长,以保持SHA-1明确[...]
另外,短SHA的长度至少为4个字符.仍然根据Pro Git的书,
通常,八到十个字符足以在项目中独一无二.
例如,Linux内核是一个相当大的项目,具有超过450k的提交和360万个对象,没有两个对象的SHA-1重叠超过前11个字符.
由于防止提交对象的所有前缀哈希值之间的任何重叠所需的最长前缀的长度(11,在Linux内核的情况下)是回购邮件大小的粗略指示,我想以编程方式确定相应的数量.我自己的本地存储库.我怎样才能做到这一点?
以下命令的作用是什么?:
git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)
答案应包括:
两个git commit具有相同的机会是什么 abbrev-commit
我看到git history默认显示git abbrev-commit是为了简化和美观。但是,两个相同的东西abbrev-commit出现在一个git repo中的机会是什么?
我正在开发一个新版本的git-stats工具来根据 Git 提交、作者等制作一些图表。
在当前版本中,它接受相同的提交 ID,对项目名称进行命名:
{
"some-project-url" { "hash1": "date", ... }
"some-project-url-fork" { "hash1": "date", ..., "commit-in-fork-id": "date" }
}
Run Code Online (Sandbox Code Playgroud)
我想删除存储项目 url 的要求,这意味着没有相同的哈希值。
现在我在想这是否是一个好的举动。
当导入多个项目并且每个提交都存储一次时,有两个相同 id 的概率是多少?
实际上,在现实生活中,什么时候会碰巧有两个相同的id(在两个不同的项目中)?
git ×9
activerecord ×1
algorithm ×1
azure-devops ×1
docker ×1
embed ×1
git-hash ×1
git-log ×1
git-rev-list ×1
github ×1
gitpython ×1
hash ×1
linux-kernel ×1
postgresql ×1
python ×1
sha1 ×1
version ×1
yaml ×1