git带子仓库的实现
遇到“You've added another git repository inside your current repository."
问题的同学直接看最后
一个git仓库有时候会需要引用另一个仓库,来确保能跟踪到仓库的更新。
操作方法:
在仓库目录下启动命令行,执行:
git submodule add url
url就算要添加的子仓库的地址。执行完成后,目录下会克隆好子仓库,同时会出现一个.gitsubmodules
的文件,这个文件保存的是该目录下所有子仓库的信息:
[submodule "log"] //子仓库名称
path = log //子仓库所在目录
url = https://gitee.com/killerp/log.git //子仓库地址
然后执行git status
可以发现有.gitsubmodules
和log
需要commit
,所以 执行git commit -m "add log"
;提交更新。这样一个子仓库就添加完成了。
.gitignore 实现忽略文件的版本管理
在一个项目中,有一些文件是不需要进行版本管理的,如编译生成的中间文件,临时文件等。这时候可以用.gitignore
文件来实现对这些文件的管理忽略。也就是以后git add .
和git commit
都与.gitignore
中指示的文件无关。
操作方法
项目目录下创建.gitignore
文件
这里介绍一些常用的规则:
/dir/ 忽略整个dir文件夹
*.zip 忽略所有.zip
/dir/file 忽略dir下file文件
创建文件添加规则,例如:忽略了cJSON.h文件。
.gitignore:
cJSON.h
然后执行git add 和 git commit 后,发现.gitignore并未生效。推送到远程仓库中仍然有cJSON.h,这是因为.gitignore只能忽略那些没有被track(跟踪)的文件,cJSON.h文件已经被track了,所以.gitignore对它无效。
解决办法:执行以下:取消对所有文件的track。
git rm -r --cached .
git commit -m "delete cjson.h"
提交commit,仓库就删除了对cJSON.h
的管理,最后恢复对其他文件的管理:
git add .
git commit -m "release"
此后所有的git操作均与cJSON.h无关。
特殊情况
当你想加入.gitignore文件对某个文件忽略时,如果你的仓库中带有子仓库,这时候需要注意了。
当你按以上步骤执行到git add .
时,会出现如下信息:
该信息提示你的仓库中有子仓库,不能直接add
。解决办法:执行:
git rm -r --cached log
git submodule add url
url
是子仓库地址。这两句目的是删除对log的track,然后再添加log到子仓库。最后执行:
git add .
git commit -m "update .gitignore"
大功告成!你可以试试推送到远程仓库,看看文件是否已被忽略。
辛苦打字不容易,点个赞呗。