问题标签 [git-subtree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 合并两个 Git 存储库而不破坏文件历史记录
我需要将两个 Git 存储库合并到一个全新的第三个存储库中。我发现了许多关于如何使用子树合并来执行此操作的描述(例如Jakub Narębski关于如何合并两个 Git 存储库的答案?)并且遵循这些说明大部分都有效,除了当我提交子树时合并所有文件来自旧存储库的文件被记录为新添加的文件。当我这样做时,我可以从旧存储库中看到提交历史记录git log
,但如果这样做,git log <file>
它只会显示该文件的一个提交 - 子树合并。从对上述答案的评论来看,我并不是唯一一个看到这个问题的人,但我没有找到任何已发布的解决方案。
有什么方法可以合并存储库并使单个文件历史记录完好无损?
git - Git 子树 - 保持资源代码同步
让我们调用 2 个项目 A 和 B。这是每个项目的结构:
/Foo/core/的内容应该在 A 和 B 中本地存在并同步。这意味着,如果我在项目 A 中编辑 bar.txt,我应该能够在同一台机器上在项目 B 中获得该更改,反之亦然。
我尝试创建一个名为“Core”的项目,并将其作为 A 和 B 的子模块。问题是,如果我编辑 bar.txt,将其推送到远程,然后推送 A,显然我无法获得代码在项目 B 上进行子模块更新。这不是同一个项目。
我也尝试过子树合并。问题是,“核心”并不意味着是一个独立的项目,我不能像现在这样开发它。它只是资源文件和更大的通用功能。因此,我希望能够在 A 和 B 中编辑我的 bar.txt,在该项目中专门对其进行测试,然后以某种方式在另一个项目中对其进行测试。
在 Git Book 的关于子树合并的章节中,说:
您可以 [...] 在 master 分支的 rack 子目录中进行更改,然后稍后将它们合并到您的 rack_branch 分支中,以将它们提交给维护者或将它们推送到上游。
但是没有解释我应该如何做,也没有解释我如何让我的 2 个本地文件夹保持同步。
git - git svn 与 git 子树兼容吗?
现在 git subtree 已合并到核心 git 发行版中(从 1.8.0 开始,它也在 Msysgit 上),有谁知道 git svn 是否可以与 git subtree 一起使用?
注意:我不是在谈论子树合并策略,而是在谈论this。
使用 git svn 时,不能直接使用 Git 子模块。相反,它需要另一个级别的间接性。此外,当您跟踪第三方存储库时,git subtree 工作流程更加方便,这在您使用 svn 时也会发生。
我的问题是,如何确定 git subtree 与 git svn 一起使用时是否有任何问题?
git-svn - Git svn 子树工作流程
我有项目 A,其中包括项目 B 的本地分支。也就是说,项目 B 的潜在修改源包含在项目 A 的子树中。项目 A 使用 svn,项目 B 使用 git。
使用 git 作为项目 A 的本地副本,我想:
- 能够将项目 B 的上游变更合并到项目 A中。
- 能够回馈项目 B对项目 A 中包含的项目 B 的分叉的一些(不是全部)修改。
- 这样做的方式是将干净的单个提交(未压缩)发送到项目 A(通过 git-svn)和项目 B(通过 git)。
我一直在努力寻找一个混合 git-svn 和 git-subtree 功能的解决方案(git-submodule 是不可能的,因为我想要一个独特的源代码树)。但我找不到完美的解决方案。
git - 子树与特定提交合并
按照GitHub 教程,我将如何做这样的事情?
我想要的不是与 master 或任何其他分支一起工作,而是一个特定的提交。
git - 为什么我不能推送这个最新的 Git 子树?
我将 Git 子树与我正在处理的几个项目一起使用,以便在它们之间共享一些基本代码。基本代码经常更新,并且升级可以发生在任何项目中,最终所有项目都会更新。
我遇到了一个问题,git 报告我的子树是最新的,但推送被拒绝。例如:
如果我推,我应该得到一条消息,没有什么可以推...对吗?对?:(
这可能是什么原因?为什么推送失败?
git - 如何在 git 中跟踪具有相同核心文件的单独项目
我使用 git 版本控制,并且我有多个使用相同基目录的项目,尽管某些更改是针对特定项目的。
有没有一种方法可以使用相同的 git repo 跟踪超级文件夹(在我的情况下为 root/private/core)以及公共和私有项目特定目录。另外,如果我在一个项目中对核心文件进行更改,我希望在其他项目 git repo 中也进行更改。
我想出的方法是在根文件夹中创建一个 git repo,然后为项目创建分支,而不是跟踪其他项目文件。但是使用这种方法,我必须合并其他项目中的核心更改,并且也存在逻辑错误,因为在这种情况下,分支将用作项目。
我也研究过子模块,但这似乎也不是最好的解决方案。如果有一个解决方案需要我更改我的项目目录系统,我可以做到,尽管我想分别保留公共、私有和核心目录。
目前我的目录的简化示例:
- 根
- 私人的
- 核
- 项目
- 项目1
- 项目2
- 上市
- 项目1
- 项目2
- 私人的
在私有项目文件夹中有特定于项目的核心 php 扩展,而在公共项目文件夹中只有样式表、javascript 和索引。
git - git sparsecheckout - 如何拉入不同的目录
我正在使用 pootle 来允许人们在 PHP Yii 项目中翻译 .po 文件。
一旦翻译者更新了 .po 文件,Pootle 就可以拉取和推送翻译。另外,我们有开发人员在网站上工作,他们也可能会更新翻译文件以添加更多要翻译的文本。
Yii 要求 .po 文件位于:
yii-project/protected/messages/en_gb/messages.po
Pootle 要求目录结构为:
pootle/yii-project/en_GB/messages.po
为了让 pootle 拉和推,.git 目录需要在 pootle/yii-project/.git 中。
我曾尝试使用 git sparse checkout,但这会将文件拉入 pootle/yii-project/protected/messages/en_gb/messages.po 不幸的是 pootle 没有收到。
我无法在其他地方提取存储库然后进行软链接,因为那时 pootle 将无法找到 .git 目录。
我真正想做的是一个目录的稀疏检出并将结果映射到另一个目录,即检出:
pootle/yii-project/protected/messages/ -> pootle/yii-project
我不想使用 git-subtree,因为我希望开发人员或翻译人员能够更新文件。我不想使用子模块,因为我不喜欢额外的拉动开销,我们希望开发人员在一次提交中包含与新功能有关的所有更改(而不是在主项目上的一次提交和一个在子模块上)。
有什么建议么?
git - 将 Git 子模块转换为子树后出现合并错误
我有一个项目,我最初将子模块用于一些依赖代码。事实证明,子模块并不真正适合这个项目(而且它们在实践中很难使用),所以我将每个子模块转换为子树(使用新git-subtree
功能)。
在我的工作存储库中,我已成功删除每个子模块并将旧的子模块存储库添加为子树。这没问题。
当我转到另一个克隆并尝试从第一个克隆中提取时,合并步骤中出现以下错误:
这似乎是因为文件从一开始sub/
就从未真正存在于主存储库中,并且当 Git 应用补丁进行更新.gitmodules
时,它不会删除包含子模块文件的目录。在处理下一次提交时,Git 尝试在其中创建新文件,sub/
这些文件现在是主存储库的一部分,所有这些文件都与sub/
.
我发现的解决方法是使用rm -rf sub
before git pull
,这样可以避免这个问题。
我的问题是,有没有我可以使用的命令行开关git merge
,上面写着“覆盖工作目录中碰巧存在的任何文件”?更好的功能git merge
是查看现有文件的内容,如果内容与它要创建的文件相同,则禁止显示错误消息并继续。
更新:我已经创建了演示这个问题的 Git 存储库,以准确显示我在说什么。重现:
这应该会导致错误消息
git - git pull 何时导致多个分支之间的合并?
我试图了解导致 git 在切换到开发分支后将我正在处理的功能分支合并到主开发分支的情况。
我能够恢复合并,但花了一天的大部分时间才能完全解决,我想在将来避免它。
这是工作流程:
在我的功能分支上工作后,我需要修复错误。我的功能分支 (refs/heads/feature/uploader/90) 与主开发分支保持同步:
然后我需要切换到开发分支:
git输出:
切换到分支 'develop' 你的分支落后于 'origin/develop' 88 次提交,并且可以快进。
然后当我发出拉动时:
出于某种原因,看起来 git 决定将我的功能分支合并到开发中,输出如下所示:
我的提交日志显示我正在提交: Merge branch 'feature/uploader/90' and 'develop' of github.com:MakerStudios/dashboard into develop