我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境.我将更改有问题的信息,以从未包含在存储库中的配置文件加载.我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?
编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然使用.相反,我想删除/删除/更改其中某些字符串的出现.
所以我在之前的提交中错误地提交了我的secrets.yml(yikes !!)并且我想清理我的git提交历史.似乎禁食最简单的方法是使用BFG.我已经下载了jar文件并安装了Java是必需的,并且我创建了一个我的repo的镜像 - 但是当我按照文档运行命令时:
java -jar bfg.jar --delete-files secrets.yml my-repo.git
我收到了错误 Unable to access jarfile bfg.jar
文档非常漂亮,但没有说明我应该做些什么来安装它或让它运行,或链接到我的镜像仓库,我很困惑.我看了一个youtube教程,说我应该使用像这样的命令创建一个符号链接;
ln -s ~/bfg-1.11.6.jar /usr/local/bin/bfg
运行bfg,除了我不确定该命令的第二部分是指(/usr/local/bin/bfg)或它应该指向我的情况,因为这对我来说不起作用.我将jar文件保存在用户根目录中.我需要搬家吗?如何在镜像仓库上运行BFG,运行时我是否应该在镜像应用程序目录中?或者从应用程序外部运行它?
我已经提交了我的工作,我想把它推送到我在 github 上的仓库
但推送失败并显示此错误:
error: RPC failed; curl 55 SSL_write() returned SYSCALL, errno = 32
fatal: the remote end hung up unexpectedly
Total 10 (delta 3), reused 0 (delta 0)
fatal: the remote end hung up unexpectedly
Done
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
你能提供一个(全部或最常见的)操作或命令列表,这些操作或命令会危害git中的历史记录吗?
什么应该绝对避免?
git commit/ git push/ git commit --amend)我希望这个问题(如果它还没有在其他地方之前提出过)成为关于git上常见的可避免操作的某种参考.
此外,我使用git reset了很多,但我还没有完全意识到我可以对存储库(或其他贡献者副本)造成的损害.可能git reset有危险吗?
我的一个密码在我的Git仓库中提交了很少的文件.是否有一些方法可以自动将整个历史记录中的其他字符串替换为此密码,以便没有它的痕迹?理想情况下,如果我可以编写简单的bash脚本接收字符串来查找和替换并完成整个工作本身,例如:
./replaceStringInWholeGitHistory.sh "my_password" "xxxxxxxx"
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题与那个问题不重复,因为我要求在不删除整个文件的情况下替换字符串.
我想git filter-repo为我的多提交拉取请求自动应用一些脚本化样式指南重构。
因此,我只想将这些操作应用于我正在推送的几个最新的新提交,而不是触及旧历史中的任何其他内容。
有办法吗?
为了具体起见,这里有一个测试存储库:https://github.com/cirosantilli/test-git-filter-repository和一个示例 blob 操作:
# Install git filter-repo.
# https://superuser.com/questions/1563034/how-do-you-install-git-filter-repo/1589985#1589985
python3 -m pip install --user git-filter-repo
# Usage.
git clone https://github.com/cirosantilli/test-git-filter-repository
cd test-git-filter-repository
printf 'd1==>asdf
d2==>qwer
' > replace.txt
git filter-repo --replace-text replace.txt --refs HEAD
Run Code Online (Sandbox Code Playgroud)
上述内容将影响测试存储库的所有 3 次提交。例如,有没有办法只影响最后两次提交?
Blob 操作应该非常适合我的用例,因为我只想触及我的提交修改的 Blob。
我在文档中找不到它。
我还询问了他们的问题跟踪器:https://github.com/newren/git-filter-repo/issues/157
在 git-filter-repo ac039ecc095d 上测试。
我正在使用一个共享的 github 存储库来协作一个项目。因为我是个白痴,所以我提交并推送了一个包含我不想共享的密码的脚本文件(是的,我可以更改密码,但无论如何我想删除它!)。
有没有办法从github的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件?我不想完全删除文件,也不想丢失 github 上的提交历史记录。
(这个问题 如何从 git 存储库中完全删除文件? 显示了如何删除敏感文件,但没有显示如何从文件中编辑敏感数据,所以这不是重复的)
设置存储库后,在最初的提交中,添加的文件之一包含了不应包含的敏感数据(程序员的个人信息)。是否有可能从git历史中完全删除它?不是整个文件,只有几行包含敏感数据。
该存储库是相当新的,因此没有分支,并且自首次提交以来未修改特定文件。(PS:我是git的新手,我还不了解复杂的命令)