本学期开了现代软件工程这门课程,在本课程的大作业中,需要小组协作完成一个项目的开发,这就需要用到Github。
我在之前只是简单听说过GitHub,没有实际的使用过,只知道是用来管理代码的,对于管理的机制、具体的管理的操作并不了解。 通过完成本次作业,我知道了Git管理的内部机制,并掌握了一些基本的git操作命令。
Git是代码的分布式版本控制系统,适用于项目开发,尤其是小组多个人一起合作开发项目。
在github上创建远程库,每个小组成员的终端是各自的本地库。
对源代码的增删改都属于修改,实际上,Git就是管理这种修改。小组成员在自己的本地库使用分支进行项目的修改,可以通过git同步到github远程仓库上;当远程仓库有了更新,其他小组成员可以clone下来最新版本的代码。通过这两方面,保持远程仓库和本地仓库同步一致,从而实现小组成员分布式协作开发。
在本文中,我主要分享一下git的基本命令操作。包括git clone/add/commit/push/status/diff/log/fetch/merge/pull
git clone
使用该命令,将远程仓库克隆到本地仓库。
- 在GitHub的官方网站上注册一个账号Guosiying,并登录。点击“+”号,选择“New repository”创建一个新的远程仓库。
仓库名设为“HelloWorld”,并选择初始化时创建一个README文件。
在仓库信息页,点击“Clone or download”,将网址“https://github.com/Guosiying/HelloWorld.git”粘贴下来,这会在clone时用。
在本机E盘新建一个文件夹Test01_GitHub,在该文件夹内空白处,右击选择“Git Base Here”,进入命令行界面。
输入git clone https://github.com/Guosiying/HelloWorld.git命令,将远程仓库克隆到本机,本机中出现了仓库HelloWorld文件夹,此为本地仓库,在文件夹中有README.md文件。
git add/git commit/git push
先后使用这三个命令,分三步将本地仓库的内容同步到远程仓库。
git add:将修改内容从工作区添加到暂存区
git commit:将暂存区中的所有内容提交到当前的分支
git push:将分支的所有内容推送到远程仓库
- 修改本地仓库内容
在本机创建一个Hello.java文件,添加到 上步已经克隆到本机的仓库HelloWorld中(E:/Test01_GitHub/HelloWorld)。
Hello.java文件中的内容:
- git add
在命令行界面,先进入本机HelloWorld仓库的目录,输入git add hello.java命令,将该文件从工作区添加到暂存区。
- git commit
在命令行界面输入git commit -m “wrote a Hello file命令,把暂存区中的所有内容提交到当前分支(master)中。
注意:如果还没有配置本机的信息,在commit时,会提示配置你的邮箱地址和名字信息。
配置好信息后,再commit一次,这次就成功了。
- git push
在命令行界面输入git push -u origin master命令,将向远程库推送master分支的所有内容。
注:在第一次push时,会弹出窗口,让你输入GitHub的注册邮箱和密码来确定身份。
经过这三步,可以在Github上看到本地仓库的修改(添加了Hello.java文件)已经被push上去了,此时本地仓库和远程仓库是一致同步的。
Hello.java文件中的内容
git status/git diff/git log
这三个命令可以让我们时刻掌握仓库的修改情况。
git status:查看当前仓库的状态(有没有进行了修改)
git diff:查看具体修改了什么
git log:查看修改提交的日志
- git status
在本机修改一下Hello.java文件(添加一条输出语句)。
在命令行界面输入git status命令,查看当前仓库的状态。可以看到Hello.java文件被modified了,但是还没有被commit。
- git diff
在命令行界面输入git diff命令,查看具体的修改内容。可以看到具体修改了文件哪一行。
再输入git add命令和git commit命令进行提交。
commit后,在git status一下。可以看到工作目录是干净的了。
再输入git push,将本次修改push到远程仓库中。
github上已经更新,此时本机仓库和远程仓库达到一致状态。
- git log
在命令行界面输入git log命令,可以查看截止到目前commit的日志信息。
git fetch和git merge 与 git pull
git fetch和git merge 与git pull都可以实现将远程仓库的最新版本同步到本地仓库。
git fetch和git merge:将最新版本从远程仓库拉取下来,不会自动merge到本地分支。
git pull:将最新版本从远程仓库拉取下来,并自动与本地分支merge。
前者将更新同步操作分为了两小步,操作了第一小步后,可以查看一下具体做了什么修改,然后再决定是否和本地分支合并,不易产生冲突。而后者是两小步一起完成,更方便了操作,但是有可能在没了解具体修改了什么内容就合并到了本地分支,若是产生了冲突,需要手动进行解决。
- git fetch和git merge
在GitHub远程仓库中修改Hello.java文件(添加一条输入语句)。
在命令行界面输入git fetch命令。
此时git status和git diff一下,可以查看一下 远程仓库的内容和本地仓库对比做了哪些修改。
然后输入git merge命令。
查看一下本地仓库文件,本地文件完成更新。
- git pull
在GitHub上再次修改Hello.java文件(再添加一条输出语句)。
在命令行界面输入git pull命令。
在本地可以看到已更新。