问题标签 [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.

0 投票
1 回答
1331 浏览

git-subtree - git subtree:从项目中以不同的前缀添加不同的分支

我有一个模块存储库,其中包含一些分支branchAbranchB等。我想使用 git subtree将这些分支导入项目存储库。我像这样设置我的项目存储库:

这似乎按预期工作,并且我从folderAfolderB的正确分支中获得了文件和历史记录。

现在我在module的master分支中进行了更改,我将其应用于branchAbranchB(通过重新设置 branchAbranchB)并且想要更新project

将这些更改提取到项目中。但是,当我这样做时

只有文件夹 A得到更新。对于folderB,我收到以下消息:

并且更改不会合并。显然,git 没有正确考虑到更改已应用于路径folderA,而不是folderB。有谁知道我可以做些什么来使这种情况起作用?

0 投票
4 回答
4209 浏览

git - 从中央仓库拉出时的 git-subtree 冲突

我有几个项目依赖于同一个库,我想为此维护一个单独的 git 存储库,以便在每个项目中使用 git-subtree 进行管理。例如,在每个项目中我可以做:

现在在处理 project1 的过程中,我对 lib1 进行了一些更改,比如 lib1/file1.c,并将其推送回中央仓库:

到目前为止,一切都很好。但现在我想更新 project2 的 lib1 副本。所以我尝试:

这是怎么回事?我确定没有对project2下的任何lib1文件进行任何更改,那么为什么这里会有冲突呢?

冲突是半空的,就像在这个问题中报告的那样。一切都在单个系统(OS X)中被拉/推,所以我知道那里建议的行尾没有问题。

当然,这是 git-subtree 的常见用例,并且有一个我看不到的简单答案。请帮忙!

编辑:我发现了一个不满意的解决方法:在将更改推送到子树之后,我需要重新运行子树拉取:

即使没有更改,它也会找到一些东西,并进行合并提交。然后,在其他地方进行了一些更改之后,当我第二次从中央仓库拉出时,冲突就不会发生了。但是如果我在 push 后忘记立即运行 pull,下一次 pull 就会出现这个冲突。

所以现在我的问题是,为什么这行得通?git-subtree 跟踪推送的方式是否存在错误,或者我错过了什么?

0 投票
2 回答
1707 浏览

git - Git:忽略子树中的文件,但在本地跟踪它并将其推送到远程生产

我有一个非常具体的工作流程,原因是我习惯git subtree将一个项目包含在另一个项目中:

  • 本地 git 存储库styling,由pull远程存储库 ( styling-exchange) 更新;

  • 另一个本地存储库styling-bare,用于同步stylingcode

  • 另一个本地 git 存储库code,它通过名为( )的远程分支将code/styling子目录添加为子树styling../styling-bare

  • production可以更新code的远程存储库git push production master

它应该如下所示:

工作流有两个用例:

  1. cdinto styling, pull from styling-exchange, 然后cdinto code, 更新子树, 对andstyling做一些改变file1and , push tofile2file3production
  2. cdinto ,对andcode进行一些更改,将更改推送到(子树推送),into , pull from ,将更改推送到file1file2file3styling-barecdstylingstyling-barestyling-exchange

我想file2在本地存储库styling/styling-barecode/production存储库中有两个完全不同且独立的版本。我需要从styling子树中获取所有更新code/styling,但我需要在file2内部进行跟踪code,而不需要从styling.

即,我想更新存储库styling中的子树code,但保留我自己的版本file2(同时在and和 file3 之间file1同步和在and之间同步),以便我可以将我自己的版本(v1)推送到以后。stylingcodecodeproductionfile2production

在 git 中是否有任何优雅的方法可以做到这一点,而无需符号链接或一些复杂的钩子?

请注意,我已经尝试过:

  • file2存储库中的.gitignore code:这不起作用,一旦我将子树拉到子树,文件就在那里styling

  • 不同分支的不同.gitignore版本,但是一旦我合并就会中断;

  • 我试图用 .git/info/exclude_from_styling排除 file2,这没有效果;

  • 我试图file2从索引中删除git update-index --assume-unchanged styling/file2,但这并不能解决我的问题;

  • 这个解决方案对我不起作用,因为我无法将所有styling目录推送到production

  • 我不确定过滤器驱动程序是否有助于解决问题;

  • 我需要file2在所有存储库中保持相同的名称,因此具有不同名称的解决方案也没有帮助。

0 投票
1 回答
214 浏览

git-subtree - 为什么 git subtree pull 会覆盖顶层目录?

我使用以下方法添加了子树:

git subtree add -P WLContainerControllers https://github.com/an0/WLContainerControllers.git master

结果提交是:

然后在一些上游更新之后,我使用以下方法进行了子树拉取:

git subtree pull -P WLContainerControllers https://github.com/an0/WLContainerControllers.git master --squash

输出:

它弄乱了谁的目录。

相关日志如下:

我正在使用通过 OS X 10.8.4 上的自制软件安装的 git 1.8.3.1。

我对 git subtree 的使用有什么问题?如何正确使用它?谢谢。

0 投票
1 回答
950 浏览

git - 是否可以在保持父 repo 结构的同时创建 git 子树的分支?

我们希望将子项目放在 Git 存储库中。repo,即 ParentRepo,将需要与我们的私有服务器同步,然后一些子目录也需要推送到公司 github repo 并从上游 github repos 中提取。我们还需要能够从将被推送到 github 的那些子目录(而不是整个父 repo)创建分支。

所以我们的层次结构是这样的:

  • ParentRepo/Dir1/GitHubProj1
  • ParentRepo/Dir1/GitHubProj2
  • ParentRepo/Dir1/PrivateProj

GitHubProj1 和 GitHubProj2 是来自社区 github 存储库的分支。我们需要能够从社区 github 存储库中获取上游更改,并从我们的 github 存储库中获取分支。PrivateProj 不会从任何 github 存储库中推送或拉取。一切都被推送到我们私人服务器上的 ParentRepo。

我们考虑过使用子模块,但似乎有很多关于它们的抱怨,所以我们决定尝试使用子树。我们使用公司 github 帐户 URL 创建了子树,并为外部 github 帐户添加了远程跟踪分支。

但是,当我们尝试使用带有 --branch 选项的 git subtree split 命令创建子树的分支时,子树的内容被放在父 repo 的根目录中。

当我们创建每个子树的分支时,我们希望在父 repo 中维护其原始目录结构。除了使用特殊的命名法之外,有没有办法以这种方式制作分支或以不同的方式设置我们的 repo 以便这是可能的?

0 投票
0 回答
180 浏览

git - 创建不包含 gitignore 文件的 git-subtree 分支

我最近开始使用 git-subtree 将一些 github 子项目保存在同步到私有服务器的父存储库中。我在子项目分支中管理 .gitignore 文件时遇到问题。

我需要能够创建子项目的分支,然后将其推送到 github,并且还能够从 github 拉下子项目的分支。我已经通过使用“git subtree split -b”命令和直接从 github 存储库创建分支,然后将它们拉到我的父存储库中进行了尝试。

但是,我一直在处理 .gitignore 中列出的文件时遇到问题,因为我不希望它们位于这些分支中。我看到了这个 Stack Overflow 帖子(Git subtree not proper using .gitignore when doing a partial clone),它描述了类似的情况,但我不能像建议的那样只使用 git clean 因为我不想完全删除文件,只是为了确保它们没有被提交或推送到 github。我也不想将 gitignore 文件放在每个子树中,因为我不希望公共 github 存储库包含我的私有文件的名称。

有没有办法制作不包含被忽略文件的分支?

0 投票
2 回答
9584 浏览

angularjs - 如何将我的 AngularJS 静态站点上传到 Github Pages?

我用 AngularJS 创建了一个静态站点,现在想将它作为 Github 页面上传。我已按照此处的所有说明进行操作

https://help.github.com/articles/creating-project-pages-manually

我可以创建一个名为的新分支gh-pagesgit push origin gh-pages我的所有内容都很好。当我去我的仓库时,我看到了新的gh-pages分支,里面有所有的文件,就像这样

https://github.com/siddhion/maxmythic_angular/tree/gh-pages

问题是当我尝试在http://siddhion.github.io/maxmythic_angular/查看我的网站时,我只得到一个 404 页面。index.html我认为问题在于我的顶级目录中没有我的。它实际上位于app目录中。我的目录结构看起来像它的样子,因为我是通过 Yeoman 创建的。我假设我需要顶层的所有文件。或者也许我在这个假设上错了?

如何让我的 AngularJS 静态站点正确显示?

更新

我按照斯蒂芬提供的步骤进行操作。我到了第 3 步,但出现错误:

然后我尝试了

然后git subtree push --prefix dist origin gh-pages再试一次,但得到了同样的错误。

在 Yeoman 部署页面上,我在一些常见错误部分下看到

您可能会收到这样的错误更新被拒绝,因为您当前分支的尖端落后。你可以通过强制推送到遥控器来解决这个问题(不过要小心,它会破坏已经存在的东西)。

我很担心强迫它,subtree push因为我一般是 git 新手,不知道什么会被破坏。我的意思是,我目前gh-pages在我的 maxmythic_angularorigin遥控器上没有分支,所以我并不担心,但我在那里有我的master,gh-pages-oldgh-pages-v1分支。如果我跑,它们会被摧毁git subtree push --prefix dist origin gh-pages吗?

0 投票
3 回答
16869 浏览

git - 为什么即使我在 Ubuntu 12.10 上安装了 git 1.8.3.2,`git subtree` 也不起作用?

我即将使用 Yeoman 将基于 AngularJS 的静态站点部署为 Github 页面。部署说明的第 3 步告诉我要做

git subtree push --prefix dist origin gh-pages

但是当我进入时,我得到

git: 'subtree' is not a git command. See 'git --help'.

这个SO 答案为我提供了有关如何升级到最新 git-core 并确保它始终升级到最新稳定版本的说明。

运行这些命令后,我git --version确保我拥有最新版本,显然我这样做了,因为git version 1.8.3.2是输出。现在当我尝试跑步时

git subtree push --prefix dist origin gh-pages

再次我仍然得到相同的以下错误

git: 'subtree' is not a git command. See 'git --help'.

最后,我刚刚重新启动了 Ubuntu 12.10 并尝试再次运行该命令,但再次出现同样的错误。

git subtree即使我已经升级到当前的稳定版本,为什么命令仍然不起作用?

0 投票
2 回答
1106 浏览

angularjs - 我尝试将我的 Yeoman AngularJS 静态站点部署到 Github 页面,但 git subtree 命令总是被拒绝

我正在尝试将我的 AngularJS 静态站点(我从 Yeoman 开始)部署为 Github 页面,并按照Yeoman 部署指南中提供的步骤进行操作。我在第 1 步和第 2 步中取得了成功,但是当我到达第 3 步时,事情就变糟了。第 3 步告诉我运行

当我运行这就是我所看到的

然后我按照提示尝试

然后git subtree push --prefix dist origin gh-pages再次尝试但得到与以前相同的错误。

在 Yeoman 部署页面上,我在一些常见错误部分下看到

您可能会收到这样的错误更新被拒绝,因为您当前分支的尖端落后。你可以通过强制推送到遥控器来解决这个问题(不过要小心,它会破坏已经存在的东西)。

我很担心强迫它,subtree push因为我一般是 git 新手,不知道什么会被破坏。我的意思是,我目前gh-pages在我的 maxmythic_angularorigin遥控器上没有分支,所以我并不担心,但我在那里有我的master,gh-pages-oldgh-pages-v1分支。如果我跑,它们会被摧毁git subtree push --prefix dist origin gh-pages吗?

更新

为了安全起见,我继续将我的工作复制到另一个文件夹中,然后添加--force到我的git subtree push命令中并运行它。这就是我得到的

我怎样才能让 git subtree push --prefix dist origin gh-pages 命令工作,以便我可以将我的网站部署到 gh-pages?

更新

我想看看这个问题是否与说明有关,或者只是与我的仓库有关,所以我设置了一个新的 Angular 应用程序yo angular并按照部署说明进行操作。git subtree push这次工作了。我仍然不知道我的 gh-pages 存储库发生了什么。我将不得不真正学习git内外。

0 投票
2 回答
6200 浏览

git - 如何创建现有存储库的 gitsubtree?

我正在尝试创建现有存储库的 gitsubtree,例如:

-> 项目A/项目B

项目 A 是父项目,我想将项目 B 添加为 git 子树。

git subtree -P projectB ssh://git@github.com/projectB.git master

但它失败了,并显示以下消息:

前缀“projectB”已经存在。

我不想再次下载所有存储库,我只想将此目录添加到我的 gitsubtree 中。

这个目录项目 B 没有被项目 A git 跟踪。

提前致谢