GIT操作小结,更新forked出来的项目和使用子模块
GIT操作小结,从一般常用操作,到有时候我们fork一个项目(比如本博就是fork了typecho)并做些修改提交,而原项目也做了些更新,修复了一下BUG等,那我希望跟随原项目更新的操作,还有子模块的使用,比如我是把自己写的主题和插件作为子模块添加,子模块都是放在oschina的私有库,那么这里需要添加子模块的操作和在拉取项目时把子模块也一起拉下来(这样也才可以运用到上篇写的自动部署)
创建新的 git 仓库
git init
添加到缓存区
git add <filename>
git add *
提交到本地仓库
git commit -m "代码提交信息"
提交到远程仓库
git push origin master
.gitignore 生效方法
项目中一些文件和文件夹(比如配置文件,上传文件的文件夹,日志文件),我们不需要提交到git,那么我们会将其排除,也就是写进.gitignore
并使其生效
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
放弃本地修改 强制更新
fetch 只是下载远程的库的内容,不做任何的合并.
reset 把HEAD指向刚刚下载的最新的版本
git fetch --all
git reset --hard origin/master
添加子模块
项目GIT地址可以用HTTPS也可以用SSH的地址,为实现后期的自动部署,建议还是使用SSH地址。后面跟该子模块的路径
git submodule add https://xxx.xxx.xxx/xxxx/DouBanInfo.git usr/plugins/DouBanInfo
拉取子模块
添加子模块后,或者拉取一个带子模块的项目时,子模块默认并不会自动被拉取下来,而是只有一个文件夹,里面是空的。子模块要进行拉取和更新需要操作
git submodule init
git submodule update
如果是想一次性拉取一个带子项目的项目,可以这样操作
git clone --recursive git@xxx.com:xxxxx/xxxxx.git
如果是子模块有更新,可以在本地仓库先进行拉取,再push到远程仓库
git submodule update --remote
子模块间有依赖关系的用
git submodule update --remote --rescursive
结合上篇的自动部署,可以这样实现拉取和更新子模块
sudo -Hu www git clone --recursive git@github.com:xxxx/xxxxx.git
sudo -Hu www git pull origin master
sudo -Hu www git submodule update
更新forked出来的项目
首先在本地添加远程仓库,upstream
是作为远程仓库名,可以自定义
git remote add upstream https://github.com/typecho/typecho.git
拉取原项目的指定分支,这里跟着master
分钟进行更新
git pull upstream master
这时候本地仓库已经更新了但你自己的远程仓库还需要提交
git push origin master