相关疑难解决方法(0)

将git仓库中的一组文件拆分到他们自己的存储库中,保留相关历史记录

可能重复:
如何在保留子目录的同时拆分git存储库?

有一次,我将我的代码添加到现有的git repo中,并且已经承诺了很多,因为其他开发人员已经提交到repo中的其他现有文件. 现在我想将我的代码拆分为自己的repo,但保留我的特定文件的所有更改历史记录.

通过阅读其他人为分割代码所做的工作,我正在查看filter-branch和执行--index-filter--tree-filter使用rm命令来查找我不关心的文件.我不想使用,--subdirectory-filter因为它不适合将我的代码保存为topdir的子目录(我们也共享一个子目录).更复杂的是,原始存储库中的一些文件随着时间的推移已经移动了一些,并且有一些文件被创建然后被删除.这使得设计一个rm列表有点......具有挑战性.

我正在寻找一种方法来过滤所有/除了/文件/目录列表.有人知道这样做的方法吗?

git git-filter-branch

36
推荐指数
1
解决办法
8141
查看次数

从 git 历史记录中永久删除文件

假设我在 git 项目中完成了 5 次提交。

在提交 4 时,我不小心添加了credentials.json 文件并推送到存储库。
在提交 5 时,我删除了该文件并进行了提交,并将此更改推送到存储库。

目前该文件未显示在最新提交中。但是如果用户检查提交历史记录,他可以转到提交 4 并检查我的文件的内容。

如何从提交历史记录中永久删除该文件,以便该文件看起来从未添加到存储库中。

注意:-
我已经尝试过以下命令:-

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch Credentials.json" \
  --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

它不会引发任何错误,但该文件不会从历史记录中删除。

实际上该文件位于 /src 文件夹内。但奇怪的是,当我给出以下命令(包括完整路径)时:-

git filter-branch --force --index-filter   "git rm --cached --ignore-unmatch ~full-path/src/Credentials.json"   --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

我收到错误:- ~full-path/src/Credentials.json 位于存储库外部。

是因为我已经在提交 5 中删除了我的文件吗?在这种情况下我能做什么?
从头开始创建新的存储库是唯一的选择吗?

git github

12
推荐指数
3
解决办法
2万
查看次数

git从整个历史记录中删除所有已删除的文件

我想知道是否有人有更高效,更聪明的方式来做到这一点.循环结构要求通过读取每个提交,从每次提交中清除每个已删除的文件.有很多提交,这需要很长时间.

git log --pretty=format: --name-status | grep -i ^D | cut -f2- | sort -u | xargs -I {} git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch {}' HEAD
Run Code Online (Sandbox Code Playgroud)

git bash git-bash

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

标签 统计

git ×3

bash ×1

git-bash ×1

git-filter-branch ×1

github ×1