问题标签 [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 subtree
:
这样
和
现在假设你有一段时间没有在这个项目上工作,你如何识别子项目的根?说,你如何识别你“子树化”的位置以及哪个是正确的遥控器?或者,你如何确定你“子树化”了?
git - 将 git 子树更改推送到上游存储库失败
在将 git 的子树合并到我的项目中之前,我试图确保它对我有用。将子树更改推送到上游存储库时遇到问题。
设置是我有两个存储库sub
和main
, 并且将存储库main
包含sub
为subtree
.
然后我执行以下操作:
- 使用初始提交初始化两个存储库。
- 直接更新
sub
repo(即在 之外main
)。 sub
从 repo 中更新main
repo。sub
将(使用)的更改拆分git subtree split
为一个单独的分支,然后我将其签出。- 尝试将上游推送到
sub
repo。自然,此推送会被拒绝,因为它会丢失对sub
. - 从
sub
repo 中提取新的更改。 - 尝试将上游推送到
sub
repo。这一次,它应该工作,但它没有。
我写了一个脚本来封装这个问题。我正在使用subtree
启用了模块的 git 版本 1.8.2.1。这是脚本:
这是输出:
其他git pull
命令(来自 的split-branch
分支main
)简单地说“已经是最新的”。
真正让我感到困惑的是,据我所知,该git push
命令实际上应该给上游 repo 一个快进提交,如下面的git log
输出所示:
这是我的问题(最后):
- 为什么这个推送被拒绝了?
- 我能做些什么呢?(如果使用
--force
选项是答案,我怎么能确定我没有做破坏性的事情?) - 有没有更好的方法来使用该
subtree
模块来避免这个问题?(注意:我不愿意使用子模块。)
git - 如何减少推送子树的不断增加的时间?
我正在使用Git 子树将几个子项目“链接”到主项目中(我来自“svn:externals”)。我已经使用了几个星期,但是将更改推送到远程子树的时间会增加每次提交。
有没有办法“清理”子树,从而减少推送更改的时间?
git - 将 git 子树移动到不同的存储库
我尝试将目录及其所有历史记录从存储库移动到另一个存储库。
提取目录的完整历史记录很容易,使用git subtree split
.
这将创建一个新分支,可以轻松地将其提取到另一个存储库。
现在我曾经git subtree add
将目录粘贴回第二个存储库。
如果我看gitk
或git log --decorate --graph
一切看起来都很好。所有提交都按预期存在。此外,所有文件都按预期存在。
但是当我尝试使用 . 查看移植文件的历史时git log -- transplanted_dir/somefile
,我只看到一个“合并”提交,由git subtree add
.
为什么我在上面的 gitk 中看到了提交,但在单个文件的日志中却没有?
如果我做一个简单的git merge
,我可以看到每个文件的历史记录,但这些文件当然不会存在于子文件夹中。
将移动的提交集成到其他存储库的正确方法是什么?
重现情况的详细示例命令:
git - Git子树拉覆盖另一个子树
我有一个存储库,其中合并了很多(5-50)个子树。当我最初拉下所有子树时,一切都按预期进行。每隔一段时间,我就会切换到我的upstream-subtrees
分支以将所有更改拉入。这通常有效。
但是,现在两次,我已经用存储库的内容(目录中的不同子树指向不同的存储库)替换了目录的内容A
(指向远程存储库)。我不知道为什么会这样。当我跑去看看我的遥控器是否搞砸了或其他什么时,一切看起来都很好。A
B
B
git remote -v
此外,目录并不A
总是被存储库覆盖B
。例如,有时D
会被覆盖C
。
我什至不知道从哪里开始寻找调试。有任何想法吗?
git - 我可以从子目录进行子树合并吗?
让我们假设有两个 git 存储库,其中包含一些文件:
现在我想将ProjectBfoo
中的目录包含到ProjectA中。
据我了解,当我这样做时git subtree add
,prefix
它应该在接收存储库中具有路径,所以当我这样做时
我最终会得到
我可以以某种方式指定我只想foo
获取此布局吗?
git - 如何列出根目录下的 git 子树?
例如,您可以执行 agit remote --verbose
并且 git 将显示您在项目中拥有的所有遥控器,git branch
将显示所有分支并发出当前分支的信号,但是如何列出所有子树,而不使用任何破坏性命令?git subtree
将给出使用示例,但不会列出任何内容。子树只有add
, pull
, push
, split
, merge
.
git - Archiving many old Git projects into a single repo
I've inherited ~150 Git repos at my new job, and my goal is to remove them from the local server where they presently reside and migrate everything into BitBucket.
Alas, most of these repos are only being kept around for legacy purposes and I don't really want to create a new BB repo for each and every one of them. Ultimately, I want to create a new repo called "DeepFreeze" that stores the more useless of these old repos in one centralized place, with them still accessible but practically invisible as a result.
There seems to be two main ways to go about this:
- Subtree merge them all into DeepFreeze.
- Add them as submodules.
Subtree Merge seems the most obvious, but I get the impression that will only add a single branch to the new repo.
Submodules thus seem to be the better option, but I worry the old projects won't effectively be stored with my new repo, and cloning DeepFreeze and then doing a "git submodule update" will fail when attempting to pull from the soon-to-be-deleted bare repos on the soon-to-be-repurposed local server.
Any thoughts? Thanks!
git - 从分支添加 git 子树
我正在尝试使用git subtree add
. 特别是,我想添加分支stable
(不是master
分支)。我试过了:
但这返回了错误
我也试过:
和:
哈希是stable
分支中最新提交的哈希。我在网上看到的使用示例都master
用于提交,是否可以subtree add
在非master分支上使用?
git - Git:仅克隆/子树/过滤 3rd 方库的子目录
svn:externals " http://svn.3rdapp.com/project/subdir/subdir/lib/mydir/subdir "
SVN 允许开发人员将 3rd 方库的子目录包含到他们自己的 repo 的子目录中。
我只想将 3rd 方库的子目录包含到我的项目中,可能是一个可以编辑的子树,并且新的上游更改与我的编辑合并。
特别是https://github.com/openid/php-openid/tree/master/Auth包含在 Vendor/Auth 中,没有来自其他目录的任何文件或历史记录。