AJax技术

git subtree教程

字号+ 作者:H5之家 来源:H5之家 2017-11-17 17:00 我要评论( )

关于子仓库或者说是仓库共用,git官方推荐的工具是git subtree。 我自己也用了一段时间的git subtree,感觉比git submodule好用,但是也有一些缺点,在可接受的

关于子仓库或者说是仓库共用,git官方推荐的工具是git subtree。 我自己也用了一段时间的git subtree,感觉比git submodule好用,但是也有一些缺点,在可接受的范围内。
所以对于仓库共用,在git subtree 与 git submodule之中选择的话,我推荐git subtree。

git subtree是什么?为什么使用git subtree

git subtree 可以实现一个仓库作为其他仓库的子仓库。

使用git subtree 有以下几个原因:

当然,git subtree也有它的缺点,但是这些缺点还在可以接受的范围内:

  • 必须学习新的指令(如:git subtree).

  • 子仓库的更新与推送指令相对复杂。

  • git subtree 的使用

    git subtree的主要命令有:

    git subtree add --prefix=<prefix> <commit> git subtree add --prefix=<prefix> <repository> <ref> git subtree pull --prefix=<prefix> <repository> <ref> git subtree push --prefix=<prefix> <repository> <ref> git subtree merge --prefix=<prefix> <commit> git subtree split --prefix=<prefix> [OPTIONS] [<commit>] 准备

    我们先准备一个仓库叫photoshop,一个仓库叫libpng,然后我们希望把libpng作为photoshop的子仓库。
    photoshop的路径为https://github.com/test/photoshop.git,仓库里的文件有:

    photoshop | |-- photoshop.c |-- photoshop.h |-- main.c \-- README.md

    libPNG的路径为https://github.com/test/libpng.git,仓库里的文件有:

    libpng | |-- libpng.c |-- libpng.h \-- README.md

    以下操作均位于父仓库的根目录中。

    在父仓库中新增子仓库

    我们执行以下命令把libpng添加到photoshop中:

    git subtree add --prefix=sub/libpng https://github.com/test/libpng.git master --squash

    (--squash参数表示不拉取历史信息,而只生成一条commit信息。)

    执行git status可以看到提示新增两条commit:

    git log查看详细修改:

    执行git push把修改推送到远端photoshop仓库,现在本地仓库与远端仓库的目录结构为:

    photoshop | |-- sub/ | | | \--libpng/ | | | |-- libpng.c | |-- libpng.h | \-- README.md | |-- photoshop.c |-- photoshop.h |-- main.c \-- README.md

    注意,现在的photoshop仓库对于其他项目人员来说,可以不需要知道libpng是一个子仓库。什么意思呢?
    当你git clone或者git pull的时候,你拉取到的是整个photoshop(包括libpng在内,libpng就相当于photoshop里的一个普通目录);当你修改了libpng里的内容后执行git push,你将会把修改push到photoshop上。
    也就是说photoshop仓库下的libpng与其他文件无异。

    从源仓库拉取更新

    如果源libpng仓库更新了,photoshop里的libpng如何拉取更新?使用git subtree pull,例如:

    git subtree pull --prefix=sub/libpng https://github.com/test/libpng.git master --squash 推送修改到源仓库

    如果在photoshop仓库里修改了libpng,然后想把这个修改推送到源libpng仓库呢?使用git subtree push,例如:

    git subtree push --prefix=sub/libpng https://github.com/test/libpng.git master 简化git subtree命令

    我们已经知道了git subtree 的命令的基本用法,但是上述几个命令还是显得有点复杂,特别是子仓库的源仓库地址,特别不方便记忆。
    这里我们把子仓库的地址作为一个remote,方便记忆:

    git remote add -f libpng https://github.com/test/libpng.git

    然后可以这样来使用git subtree命令:

    git subtree add --prefix=sub/libpng libpng master --squash git subtree pull --prefix=sub/libpng libpng master --squash git subtree push --prefix=sub/libpng libpng master 更多

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • jQuery AJAX异步请求访问和加载片段视频教程

      jQuery AJAX异步请求访问和加载片段视频教程

      2017-11-14 17:00

    • Ajax基础教程源码

      Ajax基础教程源码

      2017-11-11 13:08

    • Ajax实现的长轮询如何才能不阻塞同一时间内页面的其他Ajax请求(

      Ajax实现的长轮询如何才能不阻塞同一时间内页面的其他Ajax请求(

      2017-11-07 13:04

    • ajax传递一个参数具体实现

      ajax传递一个参数具体实现

      2017-11-07 09:08

    网友点评