mirror的git仓库怎么合并远程更新与本地提交
大概步骤是这样的
cd git-mirror
git clone ../git-ori --mirror
git-ori本身是个bare的主仓库,已经有提交内容,clone一个mirror出来
cd git-mirror-client/
git clone ../git-mirror/git-ori.git/
开发者从这个镜像clone出内容编辑,正常add commit push
之后回到镜像仓库查看
cd git-mirror/git-ori.git/
git log
看到开发者的内容提交到镜像的master分支上了,到这里都没有问题
这个时候,如果git-ori有更新,需要同步
我使用 git fetch
那么报告
From /home/user/git-mirror/../git-ori
+ c1700af...6ed5225 master -> master (forced update)
这个时候,提交到这个mirror镜像的记录由于没有再从镜像push到git-ori,同步的时候被洗掉了。
我刚才是随便找了自己机器cygwin上的git 1.7.5.1 测试的,之前有问题的环境是Ubuntu10 的git,版本没注意看
git怎么更新submodules
git 的 submodule 方式不会向仓库添加实际的的内容的,只会通过 .gitmodules 文件保留相应的子模块的哈希值。
由于你要真正要用的代码处于一个子目录中,我的方案是你先把这个子目录提取成一个单独的仓库(可以使用
git-subtree.sh
这个脚本),然后再添加这个仓库为 submodule(或者直接使用 git-subtree.sh 把实际的代码集成到你的项目,这样别人克隆就不需要更新 submodule 了)。这样做的缺点就是每当上游有更新,就需要对 submodule 的仓库做相应更新。
另外:git-subtree.sh 已经合并入 git 了,可能并不在 PATH 中,不能直接执行,不过应该在 git 的安装中的。
另一个思路:
建立 bundles 目录,添加原仓库为 submodule 到此,然后对需要的子目录做相对路径软链接,git 能够正确处理软链接。这可能是比较好的一个办法了,不需要额外维护同上游的同步。
-----------
你在子模块目录中进行的
已经是 git-subree.sh 的 split 操作了,这个时候该仓库已经和 orgin 完全不同了,等于重新建立了以该 subdirectory 为根的一个仓库,这个仓库中的对象只在你的本地,并不包含在 origin 的仓库中,所以最后才会无效的。
|