我有几个依赖于同一个库的项目,为此我想维护一个单独的git存储库,以便在每个项目中使用git-subtree进行管理.例如,在每个项目中,我可以做到:
project1$ git subtree add --prefix=lib1 /path/to/lib1.git master
project2$ git subtree add --prefix=lib1 /path/to/lib1.git master
Run Code Online (Sandbox Code Playgroud)
现在在处理project1的过程中,我对lib1进行了一些更改,比如lib1/file1.c,并将其推回到中央仓库:
project1$ git add lib1/file1.c
project1$ git commit -m "updates to lib1"
project1$ git subtree push --prefix=lib1 /path/to/lib1.git master
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但现在我想更新project2的lib1副本.所以我尝试:
project2$ git subtree pull --prefix=lib1 /path/to/lib1.git master
Auto-merging lib1/file1.c
CONFLICT (content): Merge conflict in lib1/file1.c
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我确定没有对project2下的任何lib1文件进行任何更改,那么为什么会出现冲突呢?
冲突是半空的,就像这个问题中报道的那样.所有东西都在一个系统(OS X)中被拉/推,所以我知道那里的线路结尾没有问题.
当然这是git-subtree的常见用例,并且有一个我看不到的简单答案.请帮忙!
编辑:我发现了一个令人不满意的解决方法:在将更改推送到子树后,我需要重新运行子树拉:
project1$ git subtree push --prefix=lib1 /path/to/lib1.git master
project1$ git subtree pull --prefix=lib1 …Run Code Online (Sandbox Code Playgroud) 我正在使用git-subtree从项目中提取目录.
git subtree split --prefix=src/SubProject --branch=SubProject origin/master
Run Code Online (Sandbox Code Playgroud)
鉴于这是我怎么想启动项目开始与(特别是不--rejoin)如何从分裂只有改变origin/master以SubProject在后续运行?
对于较小的项目,这一直很好.我可以用大约5秒的时间来分割项目.但是在较大的存储库中,这可能需要相当长的时间.我发现每次拆分需要5分钟.我想要合作的一些项目在一个存储库中有超过45个子项目.
我尝试了许多我认为可能有用的东西,但每种东西都以这种或那种方式失败了.我的要求是:
origin/master任何方式搞乱(所以大部分--rejoin都是不可能的)--ff-only从中获取新的更改origin/master)SubProject库必须有稳定的提交ID的.这意味着在一次或多次增量更新后SubProject,它应该在其历史记录中具有相同的提交ID,如果我在此帖子的顶部重新运行原始命令,它将获得.我不怕复杂的解决方案,但需要自动化.因历史变迁而失败是好的; 在那时,脚本可以回退以从头开始构建整个事物.在这种情况下,用户知道他们做了什么,所以他们可以从头开始经历一个很长的重建过程.:)
我尝试使用--rejoin并保留一个额外的副本,origin/master只是作为添加的更改历史记录的容器--rejoin.我遇到了这里的问题是,我是不能够或者git rebase origin/master或git merge --ff-only origin/master不加干预.我需要能够以自动方式执行此操作,因此这是不可接受的.
我能够按照我的意愿使它工作,git merge origin/master但它导致了合并提交.由于这次合并提交不会上游,我认为,未来的历史将无法预测,因此git subtree split原始环境中的新鲜事物将无法再现相同的历史记录.我可能错了.如果是这样,请向我解释这是如何安全的.:)
我尝试使用提交范围,我能够创建一个新的子树分割,SubProject其中只包含一个特定时间点的提交列表HEAD.这可能会有效,除非它看起来好像生成了一组新的提交ID,所以我认为这不是一个选项.
我已经使用AngularJS创建了一个静态站点,现在想将其作为Github页面上传.我已按照这里的所有说明进行操作
https://help.github.com/articles/creating-project-pages-manually
我可以创建一个名为的新分支gh-pages,git 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
git push using: origin gh-pages
To git@github.com:siddhion/maxmythic_angular.git
! [rejected] 5db3233d7c0822eedc5500409ce6a2d4b73ad427 -> gh-pages (non-fast-forward)
error: failed to push some refs to 'git@github.com:siddhion/maxmythic_angular.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge the remote changes
hint: (e.g. 'git pull') …Run Code Online (Sandbox Code Playgroud) 我正试图找出一种方法,dist使用Git 将文件夹部署到不同的远程仓库.
工作项目存储在一个app文件夹中.我使用grunt优化并将工作项目编译到一个dist文件夹中.我想知道是否有一种方法可以使用git将dist文件夹仅推送到与项目其余部分使用的原点不同的远程文件夹.
显然,我只需要dist文件夹即可上线.不是整个项目.
我试着调查Git Subtree - 但我不确定我是否理解这个概念,或者我是否可以用它来完成我想要做的事情.
任何建议都会非常有帮助!
提前致谢!
丰富
我有两个Git repos,foo/master和bar/master:
在foo:
code_root
->dirA
->dirB
-> *some files*
Run Code Online (Sandbox Code Playgroud)
在酒吧:
code_root
-> *same files as above*
Run Code Online (Sandbox Code Playgroud)
现在有人对*some files*... 进行了更改,如何将这些更改合并到一起*same files as above*?
当我说"合并"时,我的意思是我需要提交增量的历史(提交消息,日志哈希等).
总之,我想"叉"另一个项目的子目录(不在我的控制),以一个新的存储库的顶层,并增强在该子目录中的代码,同时保留变动合并从子目录中的能力上游项目.
我一直在读这个话题一段时间,但找不到我的情况的确定答案.git subtree分解为这些情况的大多数用法:
git subtree add这些用例不适用于我:我不会忘记忘记,而且我不拥有此fork的两面,所以git subtree add流程不适用.
所以我们假设原始模块存在于contrib/foo主项目中.我目前的想法是:
git subtree split -P contrib/foo -b upstream_vx.y创建一个新的历史,"笼"子目录到一个存储库的顶层master从我的项目创建一个分支,从这一点开始增强upstream_vx.y运行继续更新git subtree splitupstream_vx.y到我的master这对我来说并不像"git-like".具体来说,我基本上创建了上游项目子目录的并行历史记录,并为每个主要上游分支维护我自己的"提升"分支(更不用说能够引用上游标记).
有没有更好的方法来解决这个问题?
我有一个已安装另一个存储库的存储库
git subtree add -P some/path otherremote otherbranch
Run Code Online (Sandbox Code Playgroud)
开发已经发生了一些局部变化,但也进行了几轮合并:
git fetch otherremote
git subtree merge -P some/path otherremote/otherbranch
git commit
Run Code Online (Sandbox Code Playgroud)
现在我想在otherremote/otherbranch的HEAD和某些/ path的树之间获得差异.我怎样才能做到这一点?
我刚刚开始拆分包含所有产品代码的Git存储库,其中包括共享库,服务器,客户端和工具代码.
作为消除我们对DCVS的一些技术债务的一部分,我们建议将我们的共享客户端和服务器库移动到Nuget存档,该存档将对开发和发布分支具有严格控制的推送权限,以强制推动拉动请求我们一直懒散.分裂部分没什么大不了的; 我根据git filter-branch自己的喜好量身定制了历史保留,现在我正在研究如何将存储库重新组合在一起.
目前,在我准备将它们打包(以及正确的单元测试等)之前,库并不完全清晰,需要进行一些重构,并且希望能够对两个存储库进行更改,重点是代码审查,作为中短期解决方案.
我已经阅读了足够的内容,git subtree并git submodule了解他们的相对优势和劣势,但仍然对于该怎么做有冲突.虽然绝大多数资源git submodule由于其对那些不知道如何使用它的人的脆弱性而受到反对使用(有罪!),但它的另一种选择git subtree似乎缺乏我正在寻找的显式引用功能.
如果有人有类似我正在寻找的设置,或者有不同的工作流程,你能评论一下吗?当我"等待一口"时,我将离开并测试这两种策略,并希望有更高的评估.
我正在努力用Cygwin安装git-subtree,并且没有任何好的在线教程专注于从Windows中构建源代码.你有没有遇到这个问题,解决这个问题的最佳策略是什么?
我在子目录“gempak/tables”中有一个名为“gempak-tables”的git子树模块:
$ git config -l | grep -i gempak
remote.gempak-tables.url=git@github.com:Unidata/GEMPAK-Tables.git
remote.gempak-tables.fetch=+refs/heads/*:refs/remotes/gempak-tables/*
$
Run Code Online (Sandbox Code Playgroud)
但是,我无法将子树模块的更改推送到 GitHub:
$ git subtree push --prefix=gempak/tables gempak-tables master
git push using: gempak-tables master
X11 forwarding request failed on channel 0
To git@github.com:Unidata/GEMPAK-Tables.git
! [rejected] 89d8f94d010e6677f146608674cf7408eecb4a61 -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:Unidata/GEMPAK-Tables.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the …Run Code Online (Sandbox Code Playgroud) git-subtree ×10
git ×9
angularjs ×1
cygwin ×1
deployment ×1
git-branch ×1
git-diff ×1
git-merge ×1
git-remote ×1
github ×1
github-pages ×1
nuget ×1
open-source ×1
windows ×1
yeoman ×1