我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
(解决了,看到问题正文的底部)现在
寻找这个,我现在拥有的是:
几乎相同的方法,但它们都将对象留在包文件中......坚持.
我尝试了什么:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
Run Code Online (Sandbox Code Playgroud)
包中还有文件,这就是我所知道的:
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
Run Code Online (Sandbox Code Playgroud)
还有这个:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)
相同...
尝试过的git clone技巧,它删除了一些文件(约3000个)但最大的文件仍然存在...
我在存储库中有一些大的遗留文件,大约200M,我真的不希望它们在那里...而且我不想将存储库重置为0 :(
解决方案:这是摆脱文件的最短路径:
refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …我一直在玩BFG Repo-Cleaner工具,以便通过从目录层次中的几个位置删除(临时/大)文件来清理git repo的历史...
即/root/test/a.txt /root/test2/a.txt
现在我想删除'test/a.txt'的所有引用,但保留 /test2/a.txt版本..
有没有办法用BFG彻底清除它?(如https://help.github.com/articles/remove-sensitive-data中所述)
由于回购具有相当大的历史(10K提交)BFG真的是很多比迄今为止我见过的其它方法速度快...
我为树中的提交条目继承了一个带有null sha1的git存储库,从而阻止FishEye对存储库编制索引.
$ git fsck
Checking object directoriies: 100%(256/256), done.
warning in tree db22a67df70dc4ff90ec4cd666da91e9c2cb0d9:
contains entries pointing to null sha1
Checking objects: 100% (416532/416532), done.
Checking connectivity: 416532, done.
Run Code Online (Sandbox Code Playgroud)
寻找给定的树给我以下结果:
$ git ls-tree db22a6
100644 blob e615f18b55a39f2719112ce209c2505dd92d8e75 .gitignore
100644 blob ac852f06c5a04420356c1d5efca44d9a864e78b0 .project
160000 commit 0000000000000000000000000000000000000000 SomeDirectory
100644 blob 631c17e28026261a2ccf6bc570842cf4af9f181c GoDeploy.bat
100644 blob 40e992ab5c3868af2910135c3ac4610c3646e7f8 pom.xml
Run Code Online (Sandbox Code Playgroud)
回顾一下历史,我发现这SomeDirectory最初是一个git子模块,而且似乎导致问题的提交就是删除了.gitmodules和SomeDirectory.现在,有一个真正的目录SomeDirectory在罪魁祸首的完全相同的地方被调用.
我虽然我仍然可以尝试修复运行a git filter-branch以查看我最终会得到什么,但它不起作用:
$ git filter-branch --force --index-filter \
$ 'git rm --cached --ignore-unmatch SomeDirectory' \ …Run Code Online (Sandbox Code Playgroud) 我想从 git 存储库的历史记录中删除一个目录及其内容,以减小此 git 存储库的大小。(该目录包含二进制资产,例如模型和纹理,并且迄今为止对 git 存储库的大小贡献最大。)
git filter-branch --tree-filter 'rm -rf the_directory' --prune-empty HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
echo the_directory/ >> .gitignore
git add .gitignore
git commit -m 'Removing the_directory from git history'
git gc
git push origin master --force
Run Code Online (Sandbox Code Playgroud)
这似乎有效,因为我在 Github 上的提交历史记录中再也找不到对该目录及其内容的任何引用。(我有超过 1500 次提交,目录总是在那里,但不再存在。我什至找不到我明确删除目录的提交(从存储库但不是从历史记录中)。)
不幸的是,根据 Github,存储库的大小没有改变。我仍然有一个PACK450MB的文件(而实际存储库现在低于 14MB)。
我使用以下git命令来查找最大的文件:
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
git rev-list …Run Code Online (Sandbox Code Playgroud) 我不小心把我的Python虚拟环境目录包含venv在我的所有git commit和push活动中.
我刚刚加入venv了我的.gitignore.但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv).
我怎么能得到git完全忘记跟踪venv并.git再次将我的文件夹缩小到合理的大小,因为它使Heroku推动了一场噩梦.
我有一个巨大的Git仓库,有大约50个Maven模块(一个Maven反应堆构建).如何将其中一些模块移动到新的Git仓库中?
我试过git subtree但是这些命令总是将代码移动到新repo的根目录加上我不能说"我想要a/,b/并且c/d/在我的新回购中" - 而是我必须移动每个单独的树,然后我必须重命名文件然后从根部移动到他们的旧地方(相对而言).
如何导出/复制/移动一组路径过滤的变更集,从一个Git仓库到另一个,而不对它们进行任何更改?种类:我如何用Git 重复历史?
注意:我想移动数据.新的回购不应该由Git以任何方式联系起来; Maven已经为我做了这件事.subtree推动上游变革或类似事情没有必要.我希望世界看起来好像我们有两个回购开头.