相关疑难解决方法(0)

从Git历史记录中删除敏感文件及其提交

我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).

我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.

我也不想通过删除/.git目录重新开始.

有没有办法删除Git历史记录中特定文件的所有痕迹?

git git-filter-branch git-commit git-rewrite-history

330
推荐指数
9
解决办法
10万
查看次数

从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 :(

解决方案:这是摆脱文件的最短路径:

  1. 检查.git/packed-refs - 我的问题是我有refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件
  2. (可选) git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …

git version-control git-rewrite-history

76
推荐指数
4
解决办法
3万
查看次数

从特定路径中删除文件名?

我一直在玩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真的是很多比迄今为止我见过的其它方法速度快...

git-rewrite-history

16
推荐指数
1
解决办法
5372
查看次数

如何在Git树中删除null sha1的条目

我为树中的提交条目继承了一个带有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子模块,而且似乎导致问题的提交就是删除了.gitmodulesSomeDirectory.现在,有一个真正的目录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-filter-branch atlassian-fisheye

8
推荐指数
1
解决办法
9329
查看次数

从 git 历史记录中删除了目录及其文件,但 PACK 文件仍然包含文件

我想从 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)

git

6
推荐指数
1
解决办法
409
查看次数

git在添加到.gitignore后是否从版本控制中删除文件?

我不小心把我的Python虚拟环境目录包含venv在我的所有git commit和push活动中.

我刚刚加入venv了我的.gitignore.但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv).

我怎么能得到git完全忘记跟踪venv.git再次将我的文件夹缩小到合理的大小,因为它使Heroku推动了一场噩梦.

git

4
推荐指数
1
解决办法
2187
查看次数

将几个Maven模块提取/移动到新的Git存储库中

我有一个巨大的Git仓库,有大约50个Maven模块(一个Maven反应堆构建).如何将其中一些模块移动到新的Git仓库中?

我试过git subtree但是这些命令总是将代码移动到新repo的根目录加上我不能说"我想要a/,b/并且c/d/在我的新回购中" - 而是我必须移动每个单独的树,然后我必须重命名文件然后从根部移动到他们的旧地方(相对而言).

如何导出/复制/移动一组路径过滤的变更集,从一个Git仓库到另一个,而不对它们进行任何更改?种类:我如何用Git 重复历史?

注意:我想移动数据.新的回购不应该由Git以任何方式联系起来; Maven已经为我做了这件事.subtree推动上游变革或类似事情没有必要.我希望世界看起来好像我们有两个回购开头.

git extract

4
推荐指数
1
解决办法
769
查看次数