Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改git历史记录中从src/到src/main/java的路径_Git_Git Filter Branch - Fatal编程技术网

修改git历史记录中从src/到src/main/java的路径

修改git历史记录中从src/到src/main/java的路径,git,git-filter-branch,Git,Git Filter Branch,我基本上需要将整个git历史中的路径从src/..修改为src/main/java/..将目录结构修改为Maven规则 我正试图找到一个可以实现这一点的git过滤器分支的工作示例--tree filter 有什么想法吗?你真的确定要重写历史记录,而不是在一次提交中重命名目录吗?重写完整的历史是在寻找麻烦……是的,我是。我们正在从Mercurial迁移到Git。所以没有人已经在使用迁移的git存储库,我现在只有机会做这样的更改。你真的确定要重写历史记录,而不是在一次提交中重命名目录吗?重写完整的历

我基本上需要将整个git历史中的路径从
src/..
修改为
src/main/java/..
将目录结构修改为Maven规则

我正试图找到一个可以实现这一点的
git过滤器分支的工作示例--tree filter


有什么想法吗?

你真的确定要重写历史记录,而不是在一次提交中重命名目录吗?重写完整的历史是在寻找麻烦……是的,我是。我们正在从Mercurial迁移到Git。所以没有人已经在使用迁移的git存储库,我现在只有机会做这样的更改。你真的确定要重写历史记录,而不是在一次提交中重命名目录吗?重写完整的历史是在寻找麻烦……是的,我是。我们正在从Mercurial迁移到Git。因此,没有人已经在使用迁移的git repository,我现在只有机会做这样的更改。
--索引过滤器
在这里更适合:不需要签出每个修订,只需
git mv
索引中的目录即可。这两种方法都有效,但是索引过滤器更快。我想了想,但这真的有效吗
git mv
没有像
git rm
那样的
--cached
选项。您可以添加一个带有--index filter的示例吗?不,没有。它不像我说的那样起作用
git mv
需要一个工作树才能工作。即使它在仅缓存模式下工作,您也需要一个“create directory”命令,该命令也只能在索引上工作,同样使用
git mv
也不能将某些内容移动到不存在的位置。它根本不起作用,我只是试了一下@Matthieu Moy如果你认为它有效,请给出一个例子,否则请删除你的评论,因为它是误导性的,特别是因为向上投票表明它可能是正确的。事实上,除了一个
git mv--cached
,没有简单的方法使用
--index filter
。有人可能会用
git update index
来破解一些东西,但这可能是杀伤力太大了。
--index filter
在这里更适合:不需要签出每个修订,只需
git mv
索引中的目录即可。这两种方法都有效,但是索引过滤器更快。我想了想,但这真的有效吗
git mv
没有像
git rm
那样的
--cached
选项。您可以添加一个带有--index filter的示例吗?不,没有。它不像我说的那样起作用
git mv
需要一个工作树才能工作。即使它在仅缓存模式下工作,您也需要一个“create directory”命令,该命令也只能在索引上工作,同样使用
git mv
也不能将某些内容移动到不存在的位置。它根本不起作用,我只是试了一下@Matthieu Moy如果你认为它有效,请给出一个例子,否则请删除你的评论,因为它是误导性的,特别是因为向上投票表明它可能是正确的。事实上,除了一个
git mv--cached
,没有简单的方法使用
--index filter
。人们可能会用git更新索引
git-updateindex
来攻击一些东西,但这可能是杀伤力太大了。
git filter-branch --tree-filter 'mv src src_old && mkdir -p src/main && mv src_old src/main/java' -- --all