完成下面的题目,并在小组博客中写出整个操作过程及学习心得(图文并茂):(每人都要在小组博客中写出来,并注明姓名)
1.参照 http://www.cnblogs.com/xinz/p/3803109.html 的第一题,每人建立一个GitHub账号,组长建立一个Project,将本组成员纳入此Porject中的Collaborators,并添加zykgnyue 为Collaborator。
2.每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。
3.完成小组的“CanTool”项目的需求文档(使用Markdown写文档),尝试同组成员在各自PC上修改同一文档后,如何使用Git命令完成GitHub上的文档的更新,而不产生冲突。并验证GitHub上的文档确实是最新的文档。
团队项目地址:https://github.com/ljc825/sofeware_engineering_homework1
CANTool项目地址:https://github.com/ljc825/CANTool
CANTool项目需求文档:https://github.com/ljc825/CANTool/blob/master/README.md
组员心得体会
刘敬成
如题,简要介绍一下GitHub使用的简要技巧
首先对GitHub做一个简单的介绍
gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。 gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。
目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。 因为Git Shell使用起来比较麻烦,后面有时间再补充Git Shell的使用说明,在这里只对GitHub在Windows系统下的客户端程序做一些介绍。
——摘自百度百科
![](https://i-blog.csdnimg.cn/blog_migrate/f8d942035082ffe54cc3ee805dec6e66.png)
在这里主要对如何在GitHub创建工程做一些介绍
![](https://i-blog.csdnimg.cn/blog_migrate/b59966828b9845260b75dd6f27f51aa2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/074d4eae27a1e0520715a960388db65b.png)
右上角的加号,可以让我们创建新的代码仓库/组织
![](https://i-blog.csdnimg.cn/blog_migrate/f8704ae8551194b30097f536da51f0db.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88f884cad0bf428dfcd8e22af6996c40.png)
创建完成后的代码仓库如图所示
![](https://i-blog.csdnimg.cn/blog_migrate/b79317dd6a78a088b8a60be1abfd2e9d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6151f6b0ed133edc7891199986a271d1.png)
首先,你需要下载GitHub for Windows的版本,这里给一个链接 https://desktop.github.com/
下载GitHub的桌面版程序,然后按照提示完成后续的安装步骤
完成所有的安装步骤之后,你的桌面上会增长这两个图标,第一个图标是GitHub的桌面版,第二个是Git Shell,相当于是前者的命令行方式,Git Shell对于常用的Git操作,如add/commit/push/pull/fetch/clone会变得更加方便,但是相比之下GitHub的桌面版更适用于初学者
打开GitHub桌面版之后,首先登录账号,然后进入到了默认的初始界面
左侧显示的是本地和服务器端进行同步的代码仓库,当我们选中一个代码仓库后,中间会显示近期的更新列表,右侧有详细的更新内容对比,红色为删除的内容,绿色为新增的内容
本地和服务器端同步代码仓库的创建分为两种方式,一是将服务器端已经存在的代码仓库clone到本地,二是直接把本地的代码仓库上传到服务器
对于第一种方式,我们选择左上角的加号,然后选择clone选项,选择一个服务器端的代码仓库clone到本地
对于第二种方式,方法类似,只不过变为使用create操作,add操作同理
对于一个具体的代码仓库,我们可以通过GitHub桌面版查看所有的历史版本信息
我们可以选择一个版本,查看这个版本的详细更新内容,并且我们可以回滚到任意一个历史版本,这是Git的一个最大的优势,可以有效的进行代码的版本控制,节约开发成本
最后讲解一下Push、pull、fetch和commit操作
版本的控制条右上方的sync按钮用于同步本地和服务器端的内容,将本地没有的内容pull下来,将服务器端没有的内容Push上去,当我们服务器与本地的版本内容同步完成之后,如果我们继续在本地进行更改,change列表中会实时的显示我们的更新内容,我们可以填写更新的注释,并且将这些change提交,需要注意的是我们这种提交只是commit,还需要sync一下才能更新服务器端的内容,fetch操作和pull操作类似,但是只是把服务器端的代码拉取到本地的版本库,并不实时更新到当前正在工作的代码,还需要后续进行merge操作
李一鸣
上面主要工作是通过github桌面客户端实现的,接下来我就用git shell进行一下基本的使用示范。
git clone
使用 git clone 可拷贝一个 Git 仓库到本地,让自己能够查看该项目或进行修改。
如果我们需要与他人合作一个项目,或者想要复制一个项目,看看代码,就可以克隆那个项目。
我们的项目地址查看如下:
windows用户在此网站下载Git客户端并安装后,shift + 鼠标右键即可看到下图中的Git Bash选项,选择即可进入Git Bash界面。
clone命令示例如下:
git clone https://github.com/ljc825/sofeware_engineering_homework1.git
完成之后使用 ls 命令查看文件如下:
即可看到github上的项目已经成功同步到了本地。
git status
此命令用于查看项目的当前状态。
首先我先创建了目录 hello_world_lym,并在其下添加python版本的Hello World程序:
if __name__ == 'main': print("hello, world"
接着使用 git status 结果如下:
可以看到我们所做的修改已被检测出来。
git add
git add 命令可将该文件添加到缓存,示例如下:
可以看到文件已经加上去了, A代表添加,M代表修改,D代表删除。
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 才会将缓存区内容添加到仓库中。
Git 在提交时会记录我们的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址:
git config --global user.name 'my username' git config --global user.email 'my_email'
添加 -m 选项可以在命令行中提交注释
git push
使用 git commit 只是将代码添加到本地仓库中,推送(Push)操作才能将数据永久存储到Git仓库。成功的推动操作后,其他开发人员可以看到新提交的变化,
示例如下:
我使用了 git push origin master 命令。
origin指的是默认情况下服务器上的远端库的名字,master是项目的主干分支。
根据反馈,我们似乎已经成功了,检查github上的项目:
可以很清楚的看到,我们所做的修改工作已经同步到了github上,并且附带着我们最新一次修改的注释。
git pull & git fetch
git pull 命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。
为了方便展示作用,我先直接在github上向项目中增加了一个文件:
然后本地使用 git pull 命令如下:
我们可以看到我们在网页上增添的文件已被同步到本地仓库。
实际上在默认模式下, git pull 是 git fetch 后跟 git merge FETCH_HEAD 的缩写。
即git pull 与 git fetch的区别是:
git fetch:相当于是从远程获取最新版本到本地,但不会自动合并。
git pull:相当于是从远程获取最新版本并merge
到本地。
其实关于git分支的问题还有很多,不过限于篇幅,这里就不一一探讨了。
贾永恒
同样是使用命令行演示 git 的使用。首先从 https://git-scm.com/ 下载安装最新版 git,安装完成后直接打开 Windows Powershell,如下:
则 git 安装完成。
git clone
此命令克隆远程仓库(repository)至本地,本次练习项目地址为 https://github.com/ljc825/sofeware_engineering_homework1,于是从 Github 上复制远程仓库(repository)地址:
本地执行克隆命令:
可以看到本地多了一个文件夹:
即为仓库文件夹,克隆成功。
在文件夹内新增 hello_world_jyh 文件夹,在 hello_world_jyh 文件内添加文件 main.java。
git status
git status 用来查看本地仓库的状态,如是否有新建而未被跟踪的文件,是否有已经缓存但未提交的修改,添加文件后运行 git status:
发现有新建而未被跟踪的文件,提示使用 git add <file> 来包含这些文件,以便后续的提交。
git add
git add 命令用来添加未被跟踪的文件。git add <file> 将文件"file"包含进来,有一种简单的形式,git add . 表示将所有未包含的我文件包含进来,运行 git add . :
git commit
git commit 命令用来将做出的改变提交到本地仓库,如下:
-m 用来对此次提交添加信息,以便知道这次提交做出了何种改变。
提示提交成功。
git push
git push 用来将本地仓库“推送”到远程仓库,以保持两者之间的同步:
命令行提示已经将本地的 master 分支推送到远程的 master 分支 (master -> master)。
打开远程项目地址:
本地的改变已经成功推送到远程。
为了演示 git fetch 和 git pull,通过网页在 GitHub 上添加新文件:
确定提交:
确认在远程仓库中添加了新文件:
在 Github 远程仓库中添加的新文件,在本地仓库是没有的,下面通过 git fetch 和 git pull 将其同步到本地仓库。
git fetch / git diff / git merge
git fetch 用来将远程仓库的内容提取到本地,不做其他操作。分支的合并需要用到 git merge 命令。
在做完上节的操作之后,远程仓库新增了一个文件,而本地仓库是没有的。执行 git fetch:
成功将远程仓库 fetch 到本地,但本地仓库看起来没发生变化:
文件夹中也仍然只有一个文件,没有新增的 a_new_file.md:
这是因为 git fetch 仅仅将远程仓库的内容提取到本地,不做其他操作,没有改变本地仓库。
既然已经把远程仓库的内容提取到本地,可以看看它和本地仓库有什么不同,使用 git diff 命令:
git diff master origin 中,master 代表比较本地仓库的 master 分支;origin代表origin/master,即远程仓库的master分支,由于不会有歧义就进行了简写。
比较发现远程仓库多了文件 a_new_file.md。下面将远程仓库这个改变合并到本地仓库,使用 git merge:
同时文件夹中也出现了新文件 a_new_file.md:
至此本地仓库和远程仓库已经完成了同步。
git pull
git pull 相当于 git fetch 后执行自动合并,相当于 git fetch + git merge。当没有冲突发生时可自动合并,操作比 git fetch + git merge 更简便。git fetch + git merge 的好处在于在 merge 前可以通过 git diff 观察两者的不同,然后再决定是否合并;而 git pull 直接执行合并的操作。
下面看看合并时有冲突时的情况。
远程仓库中,在 a_new_file.md 的第二行添加 I like eating apple.
在本地仓库的相同文件相同行添加 I like eating banana. 并提交修改。
这将产生冲突。直接执行 git pull:
提示自动合并失败,需要手动解决冲突,然后再按顺序执行 git add / git commit / git push 使本地仓库和远程仓库再次达到一致状态。
手动解决冲突:
去掉第 2、4、6 行,然后将文件改成自己想要的样子,如我想直接舍弃远程仓库的 I like eating apple. 就改成下面的样子:
之后执行:
git add . git commit -m "fix conflict in a_new_file.md" git push
即使本地仓库和远程仓库再次达到一致状态。git add . (或 git add a_new_file.md)必须要有。
冲突解决后远程仓库也同步为 I like eating banana.
与本地一致。本地仓库和远程仓库再次达到一致状态。
李岭
Git的诞生是属于十分偶然的。它是由Linus在写Linux操作系统的过程中,发现代码库太大以至于没有办法手动管理,因此Linus就花费了2个星期的时间用C写了一个分布式版本控制系统,这就是Git。Git迅速成为最流行的分布式版本控制系统。尤其是在2008年GitHub网站上线,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等。分布式控制系统比较大的优势就是不需要联网进行工作,而且在每一个电脑上都有一个完整的版本库,所以Git的安全性相对会较高一些。
Git的安装,在http://git-scm.com/downloads网站上选择安装适合Windows 64位操作系统的。进入Git Bash界面, 如出现如下所示的界面,则证明安装成功。
安装完成之后,需要填写用户名和邮箱作为标识,如下:
接下来,需要创建版本库,简单来说就是创建一个目录。这个目录里面所有的文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件“还原”。如下是建立一个testgit版本库。
通过git init 命令把这个目录变成git可以管理的仓库。如下:
之后就会生成一个.git的目录。
现在在版本库testgit目录下建立一个记事本文件readme.txt内容如下:李岭1
第一步:使用命令 git add readme.txt添加到暂存区里面去。如下:
如图所示即为添加成功。
第二步:用命令 git commit告诉Git,把文件提交到仓库。
如图所示说明已经提交了一个readme.txt文件了,接下来可以使用git status来查看是否还有文件未提交,如下:
显示没有未提交的文件。接下来如果修改readme.txt里面的内容,比如多添加一行李岭2,继续使用git status来查看结果,如下:
上面的命令告诉我们 readme.txt文件已被修改,接下来我们可以使用git diff readme.txt命令来查看修改的内容,如下:
在知道是什么状态之后,我们可以继续重复上面的内容,提交文件以及提交之后查看状态。
下面新建一个记事本文件夹,提交然后将该文件夹删除掉,如下:
那么如何在未重新提交之前恢复已经被删除的文件夹呢?可以使用如下命令来恢复:git checkout -- text.txt,如下图:
结果如下图出现text.txt文件