赞
踩
Git子模块操作手册
一.添加子模块并提交含子模块项目
1. 在当前项目目录下执行以下命令:
gitsubmodule add https://gitee.com/tianbu/git_module.git
说明:命令分为三部分
gitsubmodule add / https://gitee.com/tianbu/git_module.git/自定义模块名
gitsubmodule add:添加子模块命令
https://gitee.com/tianbu/git_module.git:子模块仓库url,注意此路径只能使用
https路径,测试使用ssh路径有问题。
最后一个参数可选,当有时会自动把模块复制一份到你自定义的模块名之内,不推荐使用,后面会有说明
2. 运行上面命令出现如下提示说明执行成功
Cloninginto '这里显示的是添加的子模块文件夹名'...
remote:Counting objects: 11, done.
remote:Compressing objects: 100% (10/10), done.
remote:Total 11 (delta 0), reused 11 (delta 0)
Unpackingobjects: 100% (11/11), done.
Checkingconnectivity... done.
3. 默认情况下,子模块会将子项目放到子项目文件夹内,windows系统下没有文件夹会自动创建。
4. 运行 git status会有下面提示
On branch master
Your branch is upto date with 'origin/master'.
Changes to becommitted:
(use "git reset HEAD<file>..." to unstage)
newfile: .gitmodules
newfile: git_module
新的 .gitmodules 文件。 该配置文件保存了项目 URL 与已经拉取的本地目录之间的映射,打开此文件代码可看到如下内容:
[submodule "git_module"]
path= git_module
url= https://gitee.com/tianbu/git_module.git
如果有多个子模块,该文件中就会有多条记录。要重点注意的是,该文件也像 .gitignore 文件一样受到(通过)版本控制。 它会和该项目的其他部分一同被拉取推送。这就是克隆该项目的人知道去哪获得子模块的原因。
由于 .gitmodules 文件中的 URL 是人们首先尝试克隆/拉取的地方,因此请尽可能确保你使用的URL 大家都能访问。 例如,若你要使用的推送 URL 与他人的拉取 URL 不同,那么请使用他人能访问到的 URL。
注:如果第一步添加了第三个参数,此处的配置文件内,追踪的是自定义的文件夹内容,不会追踪另一个
5. 执行git diff ----cached 子模块文件夹名,
$ git diff --cachedgit_module
diff --git a/git_module b/git_module
new file mode 160000
index 0000000..83e764b
--- /dev/null
+++ b/git_module
@@ -0,0 +1 @@
+Subprojectcommit 83e764bca76c2749225039db85c952458364fcb4
6. gitdiff --cached –submodule 也可以执行此命令,查看更详细提示
$ git diff --cached--submodule
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..bba4c00
--- /dev/null
+++b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule"git_module"]
+ path = git_module
+ url =https://gitee.com/tianbu/git_module.git
Submodule git_module 0000000...83e764b(new submodule)
7. 提交时会看到下面内容:
$ git commit -m"提交子模块"
[master 5a0f9f7] 提交子模块
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 git_module
160000 模式。 这是 Git 中的一种特殊模式,它本质上意味着你是将一次提交记作一项目录记录的,而非将它记录成一个子目录或者一个文件。
克隆含有子模块的项目
8. git push提交含有子模块的项目
二.拉取含有子模块项目
1.git clone xxxx 拉取项目
拉取含有子模块的项目,子模块文件夹有,但内容是
空的。你必须运行两个命令:
git submodule init 用来初始化本地配置文件,
$ git submodule init
Submodule 'git_module' (https://gitee.com/tianbu/git_module.git)registered for path 'git_module'
git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
$ git submodule update
Cloning into'D:/phpStudy/PHPTutorial/WWW/git_sub_module/git_module'...
Submodule path 'git_module': checked out '83e764bca76c2749225039db85c952458364fcb4'
也可以用另一个命令在clone的同时把子模块项目内容拉取下来
gitclone -–recursive 项目URL
未完,继续施工
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。