除了美国一些大的科技公司,例如Google、Facebook、Netflix等在使用单一大仓库的方式来管理代码,很多中小科技企业更喜欢用多个仓库分项目存放代码,这样有很多好处,例如:下载代码快,目录干净无干扰,别的项目提交代码,不影响你的项目等等。当然,事物都有两面性,多仓库也有问题,例如:你的项目依赖另外一个项目的代码,要如何管理这些依赖关系以及版本信息,今天我们介绍一种git原生提供的方案:submodule。
添加依赖库
1
2
3
4
5
6
7
8
9
|
## 在一个已有项目中,添加一个外部依赖
git clone ssh://your-repo-url/your-project.git
cd your-project/
git submodule add ssh://your-repo-url/other-project.git
## 保存修改
git add .
git commit -m "add deps other-project"
git push
|
## 在一个已有项目中,添加一个外部依赖
git clone ssh://your-repo-url/your-project.git
cd your-project/
git submodule add ssh://your-repo-url/other-project.git
## 保存修改
git add .
git commit -m "add deps other-project"
git push
这样就添加了一个外部依赖库,使用的是主线最新版本的代码,同时记录了这个版本对应的SHA1值,可以使用下面的命令查看对应的SHA1值信息:
1
2
3
4
5
|
git ls-tree HEAD
100644 blob 0e8d85c03d6c7778e21b34257b63b0572ffd9733 .gitmodules
100644 blob 94db5091e9cb23c1562896c8810da7cb475119a4 README.md
160000 commit 429ee5dfdabc0eef3e9b3b7dd853b5fe22e66140 liba
|
git ls-tree HEAD
100644 blob 0e8d85c03d6c7778e21b34257b63b0572ffd9733 .gitmodules
100644 blob 94db5091e9cb23c1562896c8810da7cb475119a4 README.md
160000 commit 429ee5dfdabc0eef3e9b3b7dd853b5fe22e66140 liba
上面命令输出中最后一行429ee5dfdabc0eef3e9b3b7dd853b5fe22e66140
就是外部依赖liba
对应的版本SHA1值。
修改依赖库版本
上面的命令默认下载了最新的依赖库代码,但是如果你想要依赖一个特定的版本,例如:v1.0,要怎么处理?
1
2
3
4
5
6
|
cd other-project/
git checkout v1.0
cd ..
git add .
git commit -m "depend on other-project v1.0"
git push
|
cd other-project/
git checkout v1.0
cd ..
git add .
git commit -m "depend on other-project v1.0"
git push
修改依赖库代码
是的,你还可以直接修改依赖库的代码,然后提交到远端仓库,不过这里需要两步操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cd other-project/
## STEP.1 先提交依赖库代码
## coding ...
git add .
git commit -m "fix: a bug for my-project"
git push
## STEP.2 再提交自己项目仓库的依赖信息
cd ../
git add .
git commit -m "modify other-project code"
git push
|
cd other-project/
## STEP.1 先提交依赖库代码
## coding ...
git add .
git commit -m "fix: a bug for my-project"
git push
## STEP.2 再提交自己项目仓库的依赖信息
cd ../
git add .
git commit -m "modify other-project code"
git push