vcs:git

来自bbxwiki
跳转至: 导航搜索

子模块模块

常用命令
git clone <repository> --recursive 递归的方式克隆整个项目
git submodule add <repository> <path> 添加子模块
git submodule init 初始化子模块
git submodule update 更新子模块
git submodule foreach git pull 拉取所有子模块


Create-创建带子模块的版本库

git clone <repository> --recursive 递归的方式克隆整个项目
git submodule add <repository> <path> 添加子模块


Clone-克隆带子模块的版本库

方法一,先clone父项目,再初始化submodule,最后更新submodule,

初始化只需要做一次,之后每次只需要直接update就可以了, 需要注意submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git local
git -C local submodule init
git -C local submodule update


方法二,采用递归参数 --recursive,

需要注意同样submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git local --recursive


Pull

方法一,先pull父项目,然后执行git submodule update,

注意moduleA的分支始终不是master。

git -C local pull
git -C local submodule update


方法二,先进入子模块,然后切换到需要的分支,

这里是master分支,然后对子模块pull,这种方法会改变子模块的分支。

git -C local/moduleA checkout master
git submodule foreach git pull


Push

修改子模块之后只对子模块的版本库产生影响,对父项目的版本库不会产生任何影响,

如果父项目需要用到最新的子模块代码,我们需要更新父项目中submodule commit id, 默认的我们使用git status就可以看到父项目中submodule commit id已经改变了, 我们只需要再次提交就可以了。

git -C local/moduleA branch
echo "This is a submodule." > b.txt
git -C local/moduleA add .
git -C local/moduleA commit -m "add b.txt"
git -C local/moduleA push origin master
git -C local status
git -C local diff
git -C local add .
git -C local commit -am "update submodule add b.txt"
git -C local push origin master


windows客户端msysgit


回退单个文件

  • 到指定版本
    git reset a4e215234aa4927c85693dca7b68e9976948a35e MainActivity.java
  • 更新到工作目录
    git checkout HEAD file/to/restore


git history

参见