- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我不清楚以下内容的含义(来自 Git submodule update 文档):
...will make the submodules HEAD be detached, unless
--rebase
or--merge
is specified...
--rebase
/--merge
是如何改变的?
我的主要用例是拥有一堆中央存储库,我将通过子模块将其嵌入到其他存储库中。我希望能够改进这些中央存储库,可以直接在它们的原始位置,也可以从它们的嵌入存储库(通过子模块使用它们的存储库)中改进。
最佳答案
这GitPro page确实很好地总结了 git 子模块更新的结果
When you run
git submodule update
, it checks out the specific version of the project, but not within a branch. This is called having a detached head — it means the HEAD file points directly to a commit, not to a symbolic reference.
The issue is that you generally don’t want to work in a detached head environment, because it’s easy to lose changes.
If you do an initial submodule update, commit in that submodule directory without creating a branch to work in, and then run git submodule update again from the superproject without committing in the meantime, Git will overwrite your changes without telling you. Technically you won’t lose the work, but you won’t have a branch pointing to it, so it will be somewhat difficult to retrieve.
注意 2013 年 3 月:
如“git submodule tracking latest”中所述,子模块现在 (git1.8.2) 可以跟踪分支。
# add submodule to track master branch
git submodule add -b master [URL to Git repo];
# update your submodule
git submodule update --remote
# or (with rebase)
git submodule update --rebase --remote
参见“git submodule update --remote
vs git pull
”。
MindTooth的 answer说明手动更新(没有本地配置):
git submodule -q foreach git pull -q origin master
在这两种情况下,这将更改子模块引用( gitlink ,a special entry in the parent repo index),您将需要从主仓库添加、提交和推送所述引用。< br/>下次您克隆该父存储库时,它将填充子模块以反射(reflect)那些新的 SHA1 引用。
此答案的其余部分详细介绍了经典的子模块功能(引用固定提交,这是子模块概念背后的全部 Gist )。
To avoid this issue, create a branch when you work in a submodule directory with git checkout -b work or something equivalent. When you do the submodule update a second time, it will still revert your work, but at least you have a pointer to get back to.
Switching branches with submodules in them can also be tricky. If you create a new branch, add a submodule there, and then switch back to a branch without that submodule, you still have the submodule directory as an untracked directory:
所以,回答你的问题:
can I create branches/modifications and use push/pull just like I would in regular repos, or are there things to be cautious about?
您可以创建分支并推送修改。
警告(来自 Git Submodule Tutorial):始终在发布(推送)更改到引用它的 super 项目之前发布(推送)子模块更改。如果您忘记发布子模块更改,其他人将无法克隆存储库。
how would I advance the submodule referenced commit from say (tagged) 1.0 to 1.1 (even though the head of the original repo is already at 2.0)
页面“Understanding Submodules”可以提供帮助
Git submodules are implemented using two moving parts:
- the
.gitmodules
file and- a special kind of tree object.
这些一起对特定存储库的特定修订进行三角测量,该修订已 check out 到项目中的特定位置。
you cannot modify the contents of the submodule from within the main project
100% 正确:您不能修改子模块,只能引用它的一个提交。
这就是为什么当您从主项目中修改子模块时,您:
子模块使您能够拥有一个 component-based approach 开发,其中主项目仅引用其他组件的特定提交(此处为“其他 Git 存储库声明为子模块”)。
子模块是另一个不受主项目开发周期约束的 Git 存储库的标记(提交):它(“其他”Git 存储库)可以独立发展。
由主项目从另一个 repo 中选择它需要的任何提交。
但是,如果您想出于方便,直接从您的主项目修改其中一个子模块,Git 允许您这样做,前提是您首先将这些子模块修改发布到其原始 Git 存储库,然后然后引用所述子模块的新版本提交您的主项目。
但主要思想仍然是:引用特定组件:
您在主项目中引用的特定提交列表定义了您的 configuration (这就是配置管理的全部内容,仅包含 Version Control System)
如果一个组件真的可以作为您的主项目同时开发(因为对主项目的任何修改都将涉及修改子目录,反之亦然),那么它会不再是一个“子模块”,而是一个子树 merge (也出现在问题 Transferring legacy code base from cvs to distributed repository 中),将两个 Git 存储库的历史链接在一起。
这有助于理解 Git 子模块的真正本质吗?
关于Git子模块更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979167/
我查看了网站上的一些问题,但还没有完全弄清楚我做错了什么。我有一些这样的代码: var mongoose = require('mongoose'), db = mongoose.connect('m
基本上,根据 this bl.ocks,我试图在开始新序列之前让所有 block 都变为 0。我认为我需要的是以下顺序: 更新为0 退出到0 更新随机数 输入新号码 我尝试通过添加以下代码块来遵循上述
我试图通过使用随机数在循环中设置 JSlider 位置来模拟“赛马”的投注结果。我的问题是,当然,我无法在线程执行时更新 GUI,因此我的 JSlider 似乎没有在竞赛,它们从头到尾都在运行。我尝试
该功能非常简单: 变量:$table是正在更新的表$fields 是表中的字段,$values 从帖子生成并放入 $values 数组中而$where是表的索引字段的id值$indxfldnm 是索引
让我们想象一个环境:有一个数据库客户端和一个数据库服务器。数据库客户端可以是 Java 程序或其他程序等;数据库服务器可以是mysql、oracle等。 需求是在数据库服务器上的一个表中插入大量记录。
在我当前的应用程序中,我正在制作一个菜单结构,它可以递归地创建自己的子菜单。然而,由于这个原因,我发现很难也允许某种重新排序方法。大多数应用程序可能只是通过“排序”列进行排序,但是在这种情况下,尽管这
Provisioning Profile 有 key , key 链依赖于它。我想知道 key 什么时候会改变。 Key will change after renew Provisioning Pr
截至目前,我在\server\publications.js 中有我的 MongoDB“选择”,例如: Meteor.publish("jobLocations", function () { r
我读到 UI 应该始终在主线程上更新。但是,当谈到实现这些更新的首选方法时,我有点困惑。 我有各种函数可以执行一些条件检查,然后使用结果来确定如何更新 UI。我的问题是整个函数应该在主线程上运行吗?应
我在代理后面,我无法构建 Docker 镜像。 我试过 FROM ubuntu , FROM centos和 FROM alpine ,但是 apt-get update/yum update/apk
我构建了一个 Java 应用程序,它向外部授权客户端公开网络服务。 Web 服务使用带有证书身份验证的 WS-security。基本上我们充当自定义证书颁发机构 - 我们在我们的服务器上维护一个 ja
因此,我有时会在上传新版本时使用 app_offline.htm 使应用程序离线。 但是,当我上传较大的 dll 时,我收到黄色错误屏幕,指出无法加载 dll。 这似乎与我对 app_offline.
我刚刚下载了 VS Apache Cordova Tools Update 5,但遇到了 Node 和 NPM 的问题。我使用默认的空白 cordova 项目进行测试。 版本 如果我在 VS 项目中对
所以我有一个使用传单库实例化的 map 对象。 map 实例在单独的模板中创建并以这种方式路由:- var app = angular.module('myApp', ['ui', 'ngResour
我使用较早的 Java 6 u 3 获得的帧速率是新版本的两倍。很奇怪。谁能解释一下? 在 Core 2 Duo 1.83ghz 上,集成视频(仅使用一个内核)- 1500(较旧的 java)与 70
我正在使用 angular 1.2 ng-repeat 创建的 div 也包含 ng-click 点击时 ng-click 更新 $scope $scope 中的变化反射(reflect)在使用 $a
这些方法有什么区别 public final void moveCamera(CameraUpdate更新)和public final void animateCamera (CameraUpdate
我尝试了另一篇文章中某人评论中关于如何将树更改为列表的建议。但是,我在某处(或某物)有未声明的变量,所以我列表中的值是 [_G667, _G673, _G679],而不是 [5, 2, 6],这是正确
实现以下场景的最佳方法是什么? 我需要从java应用程序调用/查询包含数百万条记录的数据库表。然后,对于表中的每条记录,我的应用程序应该调用第三方 API 并获取状态字段作为响应。然后我的应用程序应该
只是在编写一些与 java 图形相关的代码,这是我今天的讲座中的非常简单的示例。不管怎样,互联网似乎说更新不会被系统触发器调用,例如调整框架大小等。在这个例子中,更新是由这样的触发器调用的(因此当我只
我是一名优秀的程序员,十分优秀!