相关疑难解决方法(0)

将(移动)子目录分离到单独的Git存储库中

我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.

如何在将文件的历史记录保存在子目录中的同时执行此操作?

我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.

为了说清楚,我有以下结构:

XYZ/
    .git/
    XY1/
    ABC/
    XY2/
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

XYZ/
    .git/
    XY1/
    XY2/
ABC/
    .git/
    ABC/
Run Code Online (Sandbox Code Playgroud)

git git-filter-branch git-subtree

1712
推荐指数
15
解决办法
25万
查看次数

如何在git存储库中创建一个git子模块的现有目录

我对git-submodules很困惑.

基本上我的问题是我不能让git明白这~/main-project/submodule是一个子模块.


我对git子模块有很好的经验:
在我的dotfiles存储库中我创建了.gitmodules文件,~/dotfiles-repo并添加了路径和URL.从那时起,如果我对子模块中的文件进行更改并运行git status,我会得到类似的结果:.vim/bundle/auto-complete (new commits) # in red

我创建了.gitmodules文件~/main-project但是:

  • 如果我更改~/main-project/submodule,甚至推的变化,我没有得到这样一个类似的反应<submodule> (new commits) # in red中运行时git status~/main-project.我只是得到了在这些目录中所做的更改
  • 当我点击github这些目录的文件夹链接时,它并没有指示我自己的存储库,但我留在同一个存储库中.

    1. 也许我错过了重点.子模块的主要特征是什么?
    2. 为什么git理解dotfiles repo中的子模块而不是我的其他repo中的子模块?
    3. 是因为我已经告诉git将文件添加~/main-project/submodule到索引中吗?

我读过这个问题导致我得到了这个答案,但我不确定是否需要git-subtree.我不想做那些可能难以改变的事情.

编辑:这个建议的重复解决方案也不起作用,我收到了一个错误Updates were rejected because the remote contains work that you do not have locally.似乎@GabLeRoux几乎告诉我要推 …

git version-control git-submodules

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

如何将现有GIT存储库的一部分作为子模块

我有这个git存储库,其中包含两个文件夹:binary-searchpoker.例如,http://github.com/soulnafein/code-katas

我想将这些文件夹放入子模块并保留其更改历史记录.

我怎样才能做到这一点?

git git-submodules

28
推荐指数
2
解决办法
1万
查看次数

使用Git和Nuget管理内部共享库

我刚刚开始拆分包含所有产品代码的Git存储库,其中包括共享库,服务器,客户端和工具代码.

作为消除我们对DCVS的一些技术债务的一部分,我们建议将我们的共享客户端和服务器库移动到Nuget存档,该存档将对开发和发布分支具有严格控制的推送权限,以强制推动拉动请求我们一直懒散.分裂部分没什么大不了的; 我根据git filter-branch自己的喜好量身定制了历史保留,现在我正在研究如何将存储库重新组合在一起.

目前,在我准备将它们打包(以及正确的单元测试等)之前,库并不完全清晰,需要进行一些重构,并且希望能够对两个存储库进行更改,重点是代码审查,作为中短期解决方案.

我已经阅读了足够的内容,git subtreegit submodule了解他们的相对优势和劣势,但仍然对于该怎么做有冲突.虽然绝大多数资源git submodule由于其对那些不知道如何使用它的人的脆弱性而受到反对使用(有罪!),但它的另一种选择git subtree似乎缺乏我正在寻找的显式引用功能.

如果有人有类似我正在寻找的设置,或者有不同的工作流程,你能评论一下吗?当我"等待一口"时,我将离开并测试这两种策略,并希望有更高的评估.

git shared-libraries git-submodules nuget git-subtree

11
推荐指数
1
解决办法
805
查看次数

重用git存储库的一部分

我有以下项目设置:

  • Solution A
    • Project 1 (轻量级组件)
    • Project 2(包含很多文件并依赖于Project 1)

Solution A是一个单一的git存储库.然后我创建了另一个解决方案,发现我可以重用甚至更新其功能Project 1.所以我的第二个解决方案可能看起来像这样:

  • Solution B
    • Project 1 (必须分享!)
    • Project 3(取决于Project 1).

现在我想Project 1成为一个共享组件.也就是说,每当我Project 1从任一解决方案(AB)更改源代码时,我都需要另一个相应的更新.

也许这有点像git子模块功能.但是,我能够使用它的唯一方法是将整体指定为子模块.由于体积庞大,这并不是我想要的理想选择.我只需要它的一小部分就是一个子模块.Solution ASolution BSolution A

我知道它可以在svn中完全按照我的描述工作:在svn:externals属性中指定外部存储库中的目录.

有什么提示吗?或许,我错过了什么?

git version-control git-submodules

10
推荐指数
1
解决办法
1261
查看次数

如何从Git中提取历史子集?

更新:我试图简化这里的真实示例以清楚地解释我的选项,但这并没有真正起作用.到目前为止,下面的链接示例过于笼统,甚至无法使用这个简单的示例.

我能够一直用SVN做这种事情并且非常熟练.现在我发现在Git中非常困难,并开始相信我的历史基本上太过密集,无法将它拉开.

真实世界的问题:我已经移动并重命名了十几个文件.他们的历史与数百个其他文件的历史混杂在一起,我想完全删除历史记录.

在SVN中,我可以使用dump/include-filter/exclude-filter/load序列来修剪存储库,很少我可能需要在加载之前在转储文件中手动重命名路径.

像这样的东西,我会做的:

SET Includes=trunk/src/Foo.aaa trunk/src/Foo.bbb trunk/src/Foo trunk/src/Bar
SET Excludes=trunk/src/Bar/Blah.aaa trunk/src/Foo/Blah.aaa

svnadmin dump FooSrc > Full.dump 2> Dump.log
svndumpfilter include %Includes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Full.dump > Filter_1.dump 2> Filter_1.log
svndumpfilter exclude %Excludes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Filter_1.dump > Filter_2.dump 2> Filter_2.log
svnadmin create FooDest
svnadmin load FooDest --ignore-uuid < Filter_2.dump > Load.log 2> Load_Errors.log
Run Code Online (Sandbox Code Playgroud)

有没有人有一个很好的例子,这不仅仅是一个简单的删除单个文件或导出单个子目录?

我可以定义文件集的最简单方法是使用7个目录路径的列表.这些目录中的所有内容都需要保存,外部的所有内容都需要从历史记录中删除.


简化问题:

我有一个Git存储库,它有一些我想要提取到自己的存储库中的文件.问题是这些文件是在原始存储库的整个历史记录中创建和修改的,因此我无法弄清楚如何干净地提取它们.

以下是我的历史记录的要点(只有更多的提交和更多要忽略).正如你所看到的,我显然不打算稍后将这些文件从历史中挑选出来:

commit 4a09d3f977a8595d9e3f61766a5fd743e4265a56

M    src/Foo/Bar/FileToExtract2.foo
A    src/Foo/Bar/FileToExtract3.bar
D    src/Foo/AnotherFileToIgnore.txt

commit 05d26f23518083270cc45bf037ced29bec45e064

M    src/Foo/Blah/IgnoreThisOneToo.foo
M    src/Foo/AnotherFileToIgnore.txt

commit 343187228f4bd8e4427395453034c34ebd9a95f3 …
Run Code Online (Sandbox Code Playgroud)

git version-control history

10
推荐指数
1
解决办法
2727
查看次数

将SVN存储库的一部分导入现有的Git存储库

我有一个现有的SVN仓库,我想将其中的一部分导入到现有的Git仓库中.任何人都可以给我一个高级概述这样做的命令吗?

摘要:

  • 我想移动现有SVN存储库中的一些子目录(但不是其余的repo)
  • 我有一个现有的Git仓库,我想将这些目录导入
  • 我想保留我移动的子目录的历史(但不是其他任何东西)

我有一种感觉,这涉及到git filter-branch一些奇怪的合并.任何帮助,将不胜感激.

svn git version-control git-svn svn2git

9
推荐指数
1
解决办法
3147
查看次数

在git中检出子文件夹

我有一个git项目,我用于最近发表的科学论文.在项目中,我有子目录doc(拆分为doc/paper doc/talks)results src等等.

现在我想发布我的源代码(但不是我的演示幻灯片等).让人们只访问src子目录的最佳方法是什么?我会发布一个zip文件来拍摄当前src目录的快照,但我希望人们能够轻松获得更新.

非常感谢.奥利弗

git subdirectory

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