我按照步骤进行操作
如何将文件从一个git仓库移动到另一个(不是克隆),保留历史记录
我确实把文件移了过来,但它带来了回购的整个历史记录!
有没有办法做同样的事情,但只带来相关文件的历史而不是存储库的整个历史记录?
编辑:
为了更清楚我正在尝试做什么,假设存储库中有10个文件,每个文件都有1个与之关联的提交(因此日志中总共有10个提交).
我有一个新的存储库,我想将一些文件转移到其中,让我们说其中两个.我想把文件从这些文件带到历史记录中,所以我希望在新repo的日志中有两个来自原始repo的提交.上面使用的方法将所有10个提交结束,即使只有2个文件过来.
我想将所有文件从 Git Repo A 移动到具有完整历史记录的 Git Repo B。Git B 已经包含另一个项目文件。我尝试了几种方法,例如
如何将文件从一个 git repo 移动到另一个(不是克隆),保留历史记录
如何使用`git format-patch`和`git am`将文件从一个git repo移动到另一个保留历史记录
我尝试通过终端执行所有提交。但是我"git filter-branch fatal:myDirectory/: 'myDirectory' is outside repository Could not get the commits"在执行git filter-branch --subdirectory-filter muDirectory -- --all.
我需要分步过程的详细指导,将所有文件从一个 repo 移动到另一个 repo。将不胜感激任何帮助,提前致谢。
我想从存储库中提取一个目录,包括其所有提交历史记录。我遇到的问题是最终结果不包含移动/重命名文件之前的提交历史记录(这是在某个时刻完成的)。
例子:
我想从项目存储库中提取 src/lib/features/TheLib 。
这个目录“theLib”曾经在某个时候位于不同的位置,例如“src/util/lib/TheLib”。
主存储库包含对文件所做的更改的完整历史记录,包括将库移动到存储库中的新位置之前的更改。
如果我尝试将目录提取到新存储库中,我只能获得文件移动/重命名后的提交历史记录。
我已经尝试过这个[0]:
$ git filter-branch --prune-empty --subdirectory-filter src/lib/features/TheLib master
Run Code Online (Sandbox Code Playgroud)
还有这个[1]:
$ ./git-filter-repo --subdirectory-filter src/lib/features/TheLib
Run Code Online (Sandbox Code Playgroud)
这两种工具都给了我相同的结果。它几乎工作正常,除了重命名之前没有提交历史记录。
我的要求:将一个 git repo 分解为多个 git repos,保留与原始 repo 中相同的目录结构,并保留复制到新 repo 的文件的提交历史记录。我已经尝试过的:
首先,我根据http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/ 中的建议尝试了git filter-branch --subdirectory-filter 结果:历史被维护,但只能在运行时查看 git log --follow 另外,在 Github 上无法看到原始提交历史。它只是将我的合并提交显示为该文件的唯一提交,并且不显示任何以前的提交。我仍然可以忍受这个限制并接受它作为解决方案。但我对这种方法的另一个担忧是,对于我想要复制的每个文件夹和每个文件,我需要多次克隆原始存储库,并且每次都重复所有 12 或 13 个步骤。我想知道是否有更简单的方法,因为我要移动很多文件。此外,由于该帖子已有 5 年历史,只是想知道是否有更新的更简单的解决方案可用?(出人意料的是,谷歌大多将这个博客显示为第一个搜索结果)
我尝试的下一件事是对较早的 Greg Bayer 帖子的评论http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/#comment-2685894846 这个解决方案使使用git subtree split使事情变得更简单,但结果与第一种情况中列出的结果相同。
然后我根据这个答案尝试了git log --patch-with-stat 和git am选项/sf/answers/799838301/ 结果:这通常会在应用补丁时遇到合并错误。我尝试了使用-m --first-parent这个答案的建议之一。这解决了错误,但没有将任何合并扩展到他们的提交中,只是将合并列为单个提交。因此大部分提交历史都丢失了。所以我添加了--3way 的另一个选项。这一遍又一遍地通过提交,并没有导致任何可接受的解决方案。
总之,我更喜欢使用第三个解决方案,如果只有一个选项可以将合并中的所有提交都列在新存储库的历史记录中。否则我必须坚持第一个解决方案,这在我的情况下有点不方便和乏味。任何建议,帮助将不胜感激。
谢谢。
问题
我想将一个文件夹(和子文件夹包含文件)从一个存储库移动到另一个存储库,保留历史记录.
我在SE上找到了一种方法:如何将文件从一个git repo移动到另一个(不是克隆),保留历史记录.还有一个关于blog.neutrino.es的不同想法.这是我想在这里讨论的最后一个.
试图解决方案
mkdir /tmp/mergepatchs
cd ~/repo/org
export reposrc=myfile.c #or mydir
git format-patch -o /tmp/mergepatchs $(git log $reposrc|grep ^commit|tail -1|awk '{print $2}')^..HEAD $reposrc
cd ~/repo/dest
git am /tmp/mergepatchs/*.patch
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我的想法是假装我们将通过电子邮件提交提交,并在另一个存储库中重新导入它们.
错误
我在执行以下操作时收到此错误消息git am /tmp/mergepatchs/*.patch:
Applying: Initial commit
error: .gitignore: already exists in index
error: README.md: already exists in index
Patch failed at 0001 Initial commit
The copy of the patch that failed is found in:
/Users/myuser/repo/org/.git/rebase-apply/patch
When you have resolved this problem, run …Run Code Online (Sandbox Code Playgroud)