软件构造课上使用git管理代码,提交到远程仓库,本篇记录相关的git学习和使用历程。
一、git的相关背景
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
Git 各平台安装包下载地址为:http://git-scm.com/downloads
二、git管理本地项目
使用git我们首先要了解关于工作区、暂存区和版本库的概念。下面这个图展示了三者的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区,标记为 "master" 的是 master 分支所代表的目录树。首先使用 git init (使用当前目录作为Git仓库,当然也可以指定目录)命令来初始化一个 Git 仓库。
git init <directory>
我们也可以使用 git clone 从现有 Git 仓库中拷贝项目,repo为Git仓库(地址),directory为本地目录:
git clone <repo> <directory>
提交代码之前我们还需要设置用户信息:
git config --global user.name "runoob"
git config --global user.email test@runoob.com
之后我们就可以管理本地仓库了,介绍几个常用的的命令,首先是:
git add - //添加文件到暂存区
git add . //添加目录下的所有文件
文件添加到暂存区之后我们就可以commit了,使用
git commit -m "message"
这样就可以将暂存区的文件提交到本地仓库了。
还有一些命令可能会用到:
git reset //回退版本。
git rm //删除工作区文件。
git mv //移动或重命名工作区文件。
git log //查看历史提交记录
还有一个重要的东西是分支管理,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。下面是分支的几个命令:
git branch (branchname) //创建分支
git checkout (branchname) //切换分支
git checkout -b (branchname) //创建一个分支并切换到该分支
git branch -d (branchname) //删除分支
git merge //合并分支
三、git提交项目到远程仓库
本地仓库管理好了之后我们就可以和远程仓库沟通了,关于远程操作的一些命令:
git remote //远程仓库操作
git fetch //从远程获取代码库
git pull //下载远程代码并合并
git push //上传远程代码并合并
下面是如何提交本地代码到远程仓库。首先需要设置git源:
git remote add origin XXX
XXX就是你github或者码云等远程仓库的地址。然后使用:
git pull
拉取远程分支信息,首次拉取合并信息。最后提交到远程仓库:
git push -u -f origin master
这个命令中的 -f 是强制推送,因为远程仓库只有初始化的文件,所以强制推送上去就行了,不加-f 会报当前分支没有远程分支,强制推送可以覆盖master,这样就完成了第一次提交的步骤。
参考资料: