Git:我可以将所有内容放在一个子文件夹中并且仍然有历史[重复]

Posted

技术标签:

【中文标题】Git:我可以将所有内容放在一个子文件夹中并且仍然有历史[重复]【英文标题】:Git: Can I put all contents in a sub folder and still have history [duplicate] 【发布时间】:2012-11-12 20:37:50 【问题描述】:

可能重复:Is it possible to move/rename files in git and maintain their history?

我是以前的 subversion 用户,不确定 git 在以下情况下如何帮助我。

我有一个 git 存储库,我的项目包含多个目录,我一直在这个结构上进行多次提交

现在我需要进行结构更改,以便将根目录下的所有文件夹/文件移动到一个新文件夹,并且我仍然想保留文件的提交历史。

例如,在我的仓库中,我目前有这样的结构

src
res
xml
file.txt
.gitignore

我希望将它们全部移动到一个名为 common 的文件夹中,以便我在 repo 的根目录下具有以下结构

common
.gitignore

有可能吗,如果可以怎么办?

谢谢

【问题讨论】:

不要认为它与您提供的参考资料重复,那里的提问者似乎已经知道我想知道什么。因此那里的答案是基于这个假设。 【参考方案1】:

你可以使用这样的命令

mkdir common
git mv src res xml file.txt common

这会移动文件,您仍然可以使用git log --follow common/file.txt 查看历史记录。如果您想重写历史记录,请查看How can I rewrite history so that all files, except the ones I already moved, are in a subdirectory?

【讨论】:

【参考方案2】:
mkdir common
git mv src res xml file.txt common
git commit

【讨论】:

这不会保留这些文件的历史记录。您需要git log --follow 才能查看历史记录。 是的,它会的。或者更确切地说,它不能,因为 git 不跟踪每个文件的历史记录。它始终跟踪整个存储库的历史记录。

以上是关于Git:我可以将所有内容放在一个子文件夹中并且仍然有历史[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我如何告诉 Git 忽略除子目录之外的所有内容?

Python 压缩一个子文件夹而不是整个文件夹路径

恢复 git 存储库/提交等

TFS Online Git - CI基于特定文件夹签入

是否可以为子文件夹中的所有存储库执行 Git 状态?

为啥我的代码没有过滤并且仍然打印列中的所有内容而不是应该过滤的内容?