这是故事:我有两个git分支master,develop
我现在正在develop.
我很久以前在目录中的repo中包含了第三方库的源文件Vendor/MGTwitterEngine.此代码已合并为master.
现在,在分支上develop,我已经删除了库并将其替换为git子模块并提交.
问题是我无法再切换回master分支机构.如果我尝试,我会收到以下错误:
The following untracked working tree files would be overwritten by checkout:
Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.h
Vendor/MGTwitterEngine/MGTwitterHTTPURLConnection.m
Vendor/MGTwitterEngine/MGTwitterLibXMLParser.h
Vendor/MGTwitterEngine/MGTwitterLibXMLParser.m
Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.h
Vendor/MGTwitterEngine/MGTwitterMessagesLibXMLParser.m
Vendor/MGTwitterEngine/MGTwitterMessagesParser.h
Vendor/MGTwitterEngine/MGTwitterMessagesParser.m
...
Aborting
Run Code Online (Sandbox Code Playgroud)
git认为子模块文件是"未跟踪"的,并且不会用相同位置的跟踪的非子模块文件替换它们.
我该如何解决这个问题?
我从不期望重命名git repo,更具体地说,它是顶级文件夹保存项目,会非常困难.是的,项目包含一些子模块,但它是需要重命名的顶级文件夹,而不是子模块文件夹.Git似乎在其子模块机制中记录了一些奇怪的绝对路径.
让我们假设一下
/tmp.proj_master和proj_mod.porj_master,proj_ALL然后克隆prom_mod为其中的子模块.proj_ALL为proj_onebillion.然后黑魔法发生了.以下步骤将重现我提到的问题.我使用的git版本是:
$ git --version
git version 1.7.9.5
Run Code Online (Sandbox Code Playgroud)
初始化proj_master.
$ cd /tmp
$ mkdir proj_master; cd proj_master
$ git init .
$ touch README
$ git add .; git commit -m "hello proj_master"
Run Code Online (Sandbox Code Playgroud)初始化proj_mod.
$ cd /tmp
$ mkdir proj_mod; cd proj_mod
$ git init .
$ touch …Run Code Online (Sandbox Code Playgroud)我正在努力弄清楚如何在我自己的回购中为自定义代码进行最佳工作,同时与供应商的库(在本例中为Magento)集成.在我的情况下,我不需要将补丁推送到供应商(虽然这将是一个很大的附带好处).
我查看了git子模块和git子树.我不认为git子模块可以满足我的需要.Magento具有以下类型的树结构:
/app
/code
/community *
/core
/local *
/design
/adminhtml
/frontend
/base
/yourtheme *
/lib
/Zend
/Varien
/yourlib *
/js
/yourjs *
/varien
/mage
Run Code Online (Sandbox Code Playgroud)
使用git子模块似乎在单独的文件夹中效果最好(例如/是你的app和/ vendor/magento是子模块).然而,由于这种程度的交织,子模块似乎不是一个好的解决方案.我错了吗?
这让我失去了git子树.但是使用git子树,相同的核心假设(供应商分支,如名称所暗示的,一个子树)并不成立.Magento不是一个子树,而是我的项目适合的核心库.那是对的吗?
如果这两种git方法不起作用,那么我应该知道的其他方法会做我想要完成的事情吗?
我不愿意追求的最后一个选择是拥有一个仓库,然后我只应用于最新的供应商变更(从tarball中提取).我不愿意这样做,因为我觉得拥有供应商的日志信息(从https://github.com/magentomirror/magento-mirror中提取)对于整理新的更新并找出影响我的更改非常有帮助.
我正在设置部署脚本.基本过程是:
问题是我的存储库包含一个子模块,它不会被放入存档中,因此不会放入发布目录中.
我见过git-archive-all,但这不适用于裸存储库.
如果不可能,我正在考虑,
碰巧我们在3个不同的移动平台之间共享一个库.办公室内有很多关于用什么来管理这个图书馆的最佳工具的争论.从我读到的Repo(Android)是一个建立在git之上的工具,用于管理用于Android的数百个git存储库,而git子模块已经是git的一部分.
理想情况下,我们希望将这个库放在一个单独的存储库中,并且能够简单地将它集成到每个不同的移动应用程序中.
使用git子模块或Repo作为管理各种平台之间使用的共享库的方法有哪些优缺点?
我有一个项目,我最初使用子模块的一些相关代码.事实证明,子模块并不适合这个项目(并且它们在实践中很难使用),因此我将每个子模块转换为子树(使用新git-subtree功能).
在我的工作存储库中,我已经成功删除了每个子模块,并将旧的子模块repo添加为子树.没问题.
当我转到另一个克隆并尝试从第一个克隆拉出时,我从合并步骤中收到以下错误:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
Run Code Online (Sandbox Code Playgroud)
看来这是因为sub/首先在主存储库中从未真正存在过文件,并且当Git应用补丁进行更新时,.gitmodules它不会删除带有子模块文件的目录.当处理下一次提交时,Git尝试在其中创建新文件sub/,现在它们是主存储库的一部分,所有这些文件都与仍然存在的文件冲突sub/.
我发现的解决方法是使用rm -rf sub之前git pull,这可以避免这个问题.
我的问题是,是否有任何命令行开关我可以使用git merge"覆盖工作目录中恰好存在的任何文件"?更好的方法是git merge查看现有文件的内容,如果内容与它要创建的文件完全相同,则禁止显示错误消息并继续.
更新:我已经创建了演示此问题的Git存储库,以准确显示我正在谈论的内容.重现:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
Run Code Online (Sandbox Code Playgroud)
这应该导致错误消息
error: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个包含Git其他存储库的项目.
我想跟上这些存储库的最新动态.了解最新功能,错误修复等问题.Qu 1)在没有收到报告的所有问题的电子邮件的情况下,在Git上保持更新存储库的最佳方法是什么?
完成此操作后,我想知道将这些内容包含到项目中的最佳方法.我知道你可以将源代码复制到项目中,但是cocoapods/sub模块用于什么?例如,使用包含的存储库的最新更改来更新项目的正确方法是什么?
是否有任何这些方法的GUI而不是终端?
在我的场景中,我有一个程序来分析数据输入文件并生成其他数据输出文件.我想版本控制程序,我想版本控制数据文件,并且作为优先选择,我希望在程序的工作副本中拥有数据文件的工作副本.我希望程序和数据分别进行版本控制,以减少"噪音".该程序不依赖于数据文件.
如果我使用git子模块,那么当数据目录中发生事情时(我认为已提交更新),程序的版本控制会注意到子模块有更新.如果程序依赖于数据,那将是有用的,但事实并非如此.
在这种情况下,是否可以在不使用git子模块的情况下在另一个工作副本中使用工作副本?
I have a project main that contains a submodule foo. For this particular project, I would like to make a small change to foo that only applies to this particular project main.
main/
+ .git
+ main.c
+ lib/
| + bar.c
+ foo/ # My `foo` submodule
+ .git
+ config.h # The file I want to patch from `main`
+ ...
Run Code Online (Sandbox Code Playgroud)
A common solution would be to go down to my submodule, make a commit Applied …
git-submodules ×10
git ×9
git-subtree ×2
repository ×2
build ×1
cocoapods ×1
deployment ×1
diff ×1
git-bare ×1
git-merge ×1
github ×1
ios ×1
magento ×1
merge ×1
patch ×1