- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
两年来,我对 Gitlab 上的许多存储库进行了大量提交。但是我意识到我没有设置正确的电子邮件。
我使用 git filter-branch
来过滤历史记录并更改用户电子邮件。
$ git filter-branch --env-filter '
OLD_EMAIL="old@example.com"
NEW_NAME="New Example"
NEW_EMAIL="new@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
然后我使用 git push --force
强制推送这些更改。它更新主分支上的贡献者。
在 git push --force --tags origin 'refs/heads/master'
之后,它也改变了标签上的贡献者。
问题:
它不会更改事件页面上的提交。转到 {Repository} > Project information > activity(显示更新的贡献者)但点击任何提交编号 --> 它加载一个没有更新的贡献者的提交。
问题:
如何重写正确的历史记录,包括在事件日志中发布的提交。
最佳答案
不幸的是,事件提要直接来自数据库事件记录,并且一旦创建记录就与 git 完全分离。据我所知,除非您具有数据库级别的访问权限,否则无法删除事件提要中的条目。
但是,可以使用 git-filter-repo
并运行存储库清理来完全删除这些提交,这样它们就可以“在 GitLab 中查看。这些链接仍将存在于事件提要中,但当您尝试查看重写/删除的提交 SHA 时,您将获得 404 页面。
另一种可能的解决方法是完全删除事件提要——做这个,只需导出您的项目,然后导入它。如果您在推送 git-filter-repo 更改之前这样做,那么所有提交的所有事件都将显示为您推送这些更改的时间戳:
如果您在之后执行此操作,则提要中将根本没有任何事件:
除了分支上的提交之外,GitLab 还保留(额外的)内部引用,这些引用通常在您克隆本地 git 存储库时不存在。包括 merge 请求、管道、注释和其他地方的引用。即使您更新了 refs/heads/*
,您也可能需要更新 Remote 上的其他 refs 才能看到更改在不同地方生效。
这会破坏某些 UI 页面并可能导致数据丢失,但这是除了删除和重新创建项目之外让 GitLab 完全删除旧引用的唯一方法。
在开始之前通过导出备份您的存储库。
要彻底改变事物,您还需要改变这些引用:
refs/merge-requests/* for merge requests.
refs/pipelines/* for pipelines.
refs/environments/* for environments.
refs/keep-around/* are created as hidden refs to prevent commits referenced in the database from being removed
不幸的是,GitLab 不允许您直接访问其中一些“stash 的引用”。要完全删除这些引用,您必须将项目导出到 tarball 并从 tarball 恢复本地 git repo,然后再次应用过滤器,并推送到远程。
导出您的项目,然后在压缩包中有一个 project.bundle
文件。
git clone --bare --mirror ./project.bundle myrepo
cd myrepo
然后 use git-filter-repo彻底改变所有地方的电子邮件。
# replace with your actual filter-repo command needed
git filter-repo --name-callback '...' --email-callback '...' --commit-callback '...'
然后强制推回所有引用,包括 stash 的引用:
# reset the origin
git remote remove origin
git remote add origin https://gitlab.example.com/<namespace>/<project_name>.git
# push all refs
git push origin --force 'refs/heads/*'
# tags
git push origin --force 'refs/tags/*'
# prevent dead links to commits that no longer exist
git push origin --force 'refs/replace/*'
在此之后,您需要使用 git filter-repo
生成的 commit-map
初始化存储库清理。它位于 ./filter-repo/commit-map
的 repo 中。它看起来像这样:
$ cat filter-repo/commit-map
old new
87c5016db64c6e8f4fc0feba4810b17c2c2222b5 2bb77407040e8a658eceacdf3034d24cedcc1ecd
cea6d9aa25e52dd755b694876a482a158debc60a 9a9b1d1a845d1096f4d3734191f883b52ffac6e9
5f1ac8c5fa47ac393d5e3f24b4b9812aaefbf5d7 b659497ed15ab0a3191dc5c6451c9440ca10d6e4
有了提交映射,转到设置 -> 存储库 -> 清理并上传 commit-map
文件。您会看到一条消息:
Repository cleanup has started. You will receive an email once the cleanup operation is complete.
一段时间后(取决于 repo 大小),旧的提交应该完全消失。
如前所述,在事件提要中,指向旧提交的链接仍然在那里:
但是如果你点击链接,提交本身现在会产生一个 404 并且不能在 GitLab 中查看(永远消失!):
关于Git - 重写所有受影响的提交用户电子邮件 - 不适用于事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70286373/
我每天运行命令将新记录插入 BigQuery 表,并想记录每天插入的记录数。 我创建了一个 QueryJob包含 SELECT 查询和 destination 表的对象。我将 write_dispos
当您登录受密码保护的页面时,WordPress 会设置一个类似于 wp-postpass_hash 的 cookie。 这个 cookie 似乎永远存在。我希望能够为用户提供“注销”链接。如果我不知道
我正在用 C++ 设计一个公共(public) API,我相信我想保留 C++ 属性函数样式约定,它们看起来像 int& Value() 和 const int& Value() const 而不是按
我正在构建一个使用 jQuery 图片库的网站。你可以看一个例子 here . 出于某种原因,当画廊更改图像时,或者当您手动更改图像时,页面高度似乎因为需要更好的词而“闪烁”。新图像似乎增加了页面高度
我正在尝试使用 CSS3 实现一个简单的 3D 照片库。它在 IE10+ 浏览器上运行良好,但在最新版本的 chrome 上有一个小错误,即单击时按钮消失。谁能告诉我如何解决这个问题?提前谢谢你。 w
我想知道为什么其中一些程序会抛出段错误,而另一些则不会。 这个程序抛出一个段错误: #include int main(){ int ar[2096263]; printf("asd
今天我移植了我的旧内存基准测试 从 Borland C++ builder 5.0 到 BDS2006 Turbo C++,发现奇怪的事情。 BCB5 的 exe 运行正常且稳定 来自 BDS2006
下面是我的代码,用于解决 PE 问题 7(“找到第 10001 个素数”): #include using namespace std; bool isPrime(int n, int primes
我有两个 float 元素,右边和左边。 它们的父元素都是 text-align: center, margin: auto: 1. text 999 ' style='curso
我正在为我的 UI 元素制作一个简单的动画。 我有一个动画组件,它有 2 个不同的动画 - ZoomIn 和 ZoomOut。 每当需要在屏幕上显示 UI 元素(例如按钮)时,就会显示这些动画。 我通
我正在使用 .net 3.5 和 vb.net。我对下面提到的每种加密的内部工作知之甚少。我只使用 .net 类库中提供的类。 我有一段信息已经用 TripleDes 加密,然后是 Rijndael,
我有一个关于正确设计 php 文件及其在服务器上的存储的一般性问题。 问题是这样的:我将一个 php 对象的函数拆分到不同的 php 文件中,例如: 文件 1 AndroidFlashCard.php
我在地址表单输入上有自动完成功能。当用户点击建议时,州和邮政编码信息会自动填充。cp_state 是带有状态名称下拉列表的选择框,而cp_zipcode 是邮政编码的输入文本。 我使用下面的 java
我试图按顺序选择记录,但随机限制。 SELECT * FROM tm_winners WHERE paid_out=0 ORDER BY DESC LIMIT RAND(4,8) 但是,我似乎无法随机
我有一张这样的表,我想选取 20 位 HitTest 门的歌手并按字母顺序对他们(这 20 位歌手)进行排序。 id name hit --------------
我正在尝试使用受风影响的雨粒子,也就是 physicsWorld 重力。 我可以看到重力确实对我的 SKSpriteNode 有影响,但我无法对 SKEmitterNode 产生相同的影响。 我只是想
我有一个问题,我在网站加载时调用淡入,但由于 css 过渡效果,元素变为完全不透明,立即淡出然后淡入,我试图找到解决这个问题的方法,因为它看起来很糟糕 jQuery $(window).on("loa
我定义了一个容器元素,包含一个float div和一个ul,并且 ul 元素包含一些 float li 元素。我想清除 ul 的 float ,但 ul 的高度受其 float 兄弟元素的影响。这是
我想使用一项服务。我 100% 确信该服务可以正常工作。 服务电话 public void add(User user) { ConnectionRequest con = new Connectio
如果您在桌面/PC 上访问某人的 instagram 页面,单击搜索栏时,它会向左浮动,然后可以输入文本进行搜索。当搜索字段中没有文本时,搜索图标和“搜索”占位符会回到原来的中心位置。 我假设 jav
我是一名优秀的程序员,十分优秀!