25组第二次作业
完成下面的题目,并在小组博客中写出整个操作过程及学习心得(图文并茂):(每人都要在小组博客中写出来,并注明姓名)
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上的文档确实是最新的文档。
创建小组项目,并添加协作者
首先创建一个Repository
然后添加协作者,进入Repository主目录,选择setting
然后点击Collaborators
在下方搜索栏搜索需要添加的用户的ID
点击Add Collaborator添加
然后可以生成链接发送给该用户,需要等待该用户接受邀请,接受邀请后,就成功的添加了协作者
张久武
在GitHub上新建一个 Repository
git clone
在自己电脑上clone一份
git clone https://github.com/little-by/HelloWorld.git
在github上给项目添加一个readme
git fetch/merge/pull
在本地更新一下
git fetch origin master
git merge origin/master
或者使用下面这个命令
git pull origin master
git pull命令执行的效果可以看成是先执行git fetch得到远端的分支,再执行git merge将其和本地分支合并。
git add/commit/push
新建一个文件main.cc
将文件添加到本地仓库
git add main.cc
git commit
然后将变更同步到远程仓库
git push
第一次github push需要登录github账户
git diff
可以使用git diff命令查看当文件和上个版本的差异
修改一下README.md,修改其中一行
可以看到git将修改前的行视为被删除,而添加了一个修改后的行。
git rm
删除一个文件,当单纯的删除一个文件时,比如直接使用rm
现在使用git commit是不会将删除的变更提交的,
要使用git rm告诉commit
git rm main.cc
现在在使用git commit 会发现才会有变化,再使用git push发现
git rm main.cc git commit -m "rm main.cc" git push
可以看到main.cc已经消失。
git branch
分支管理
之前的操作一直在对master主分支进行操作,当时当小组成员要对软件的不同功能或者模块进行开发时,如果还是操作同一个分支,这样造成的分歧也很大所以就需要创建分支。创建分支的作用还有一个,新功能的添加可以避开主分支,等该功能测试有效再并入主分支,这样能保证主分支一直是一个稳定的随时可以发布的版本。
进入HelloWorld目录,运行下面命令可以传创建一个名为kotar的分支
git branch kotar
然后切换到新分支
git checkout kotar
上边两个命令可以用以下命令代替
git checkout -b kotar
-b表示创建,并立即切换到新分支
可以随时用git branch查看现在存在的分支
可以看到master和kotar两个分支,绿色带星号的表示当前分支。
然后在新分支上新添一个文件
test.cpp
这时候push就需要制定分支了。
到github上查看,发现kotar这个分支已经创建
切换到这个分支,发现test.cpp已经上传
当该分支上的工作完成时,就需要将其与主分支合并,合并分支可以使用一下命令
git checkout master
git merge kotar
首先切换回master然后将kotar合并进来
这时kotar分支就没用了,可以删除,试用以下命令
git branch -d kotar
么红帅
注册github帐号,创建代码仓库,如图,点击个人头像左边的“+”,选择New repository。
输入Repository name,点击Create repository创建仓库。
git clone
如果项目中需要多个人协作开发,那么每个人都可以使用git clone从远程仓库克隆到本地。要克隆一个仓库,首先要知道仓库的地址,点击Clone or download即可查看仓库地址:https://github.com/Mark1mE/hello_world.git。
安装Git客户端后,鼠标右击选择选项中的Git Bash Here进入Git Bash界面。
使用git clone https://github.com/Mark1mE/hello_world.git克隆一个本地库,即可看到github上的项目已经同步到了本地。
git add
git add命令可将文件添加到暂存区,执行完命令后没有任何显示则说明添加成功。git add <filename> 表示将单个文件包含进来,git add . 表示将所有未包含的文件包含进来。
git commit
git commit命令用于将修改提交到本地代码库。
第一次进行commit时需要设置我们的用户名和Email地址,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新。
1 git config --global user.email "you@example.com" 2 git config --global user.name "Your Name"
其中,-m参数用于指定本次提交的描述信息。
git push
git push用于将本地仓库内容同步到远程仓库,如图,结果显示已经将本地的master分支提交到远程仓库的master分支。
检查github上的项目,显然,所做的修改已经同步到了远程仓库,同时带有-m指定的描述信息。
git fetch & git pull
git fetch用于将远程仓库的内容获取到本地,若要进行分支的合并则需使用git merge命令。而git pull相当于git fetch + git merge,即直接进行合并。
为了进行演示,在github远程仓库中创建一个新文件HiWorld.java。
此时本地是没有HiWorld.java文件的,执行git fetch:
成功将远程仓库fetch到本地,但是本地并未出现HiWorld.java文件。
我们可以使用git diff查看本地仓库和远程仓库的不同。
执行git merge命令进行合并,至此,本地仓库和远程仓库才完成了同步。
下面演示git pull,为了说明冲突时的情况,在远程仓库中的HiWorld.java的输出改为:
system.out.println("Hello, world!");
将本地的HiWorld.java的输出改为:
system.out.println("Goodbye, world!");
并提交修改。
执行git pull后将产生conflict,需要我们手动解决,然后再按顺序执行git add / git commit / git push使本地和远程仓库同步。
手动解决冲突:
按照自己的期望进行修改,比如去掉3、5、6、7,然后依次执行git add / git commit / git push。此时查看远程仓库也同步为system.out.println("Goodbye, world!")。
郭思莹
我在之前只是简单听说过GitHub,没有实际的使用过,只知道是用来管理代码的,对于管理的机制、具体的管理的操作并不了解。 通过完成本次作业,我知道了Git管理的内部机制,并掌握了一些基本的git操作命令。
Git是代码的分布式版本控制系统,适用于项目开发,尤其是小组多个人一起合作开发项目。
在github上创建远程库,每个小组成员的终端是各自的本地库。
对源代码的增删改都属于修改,实际上,Git就是管理这种修改。小组成员在自己的本地库使用分支进行项目的修改,可以通过git同步到github远程仓库上;当远程仓库有了更新,其他小组成员可以clone下来最新版本的代码。通过这两方面,保持远程仓库和本地仓库同步一致,从而实现小组成员分布式协作开发。
git clone
使用该命令,将远程仓库克隆到本地仓库。
1.在GitHub的官方网站上注册一个账号Guosiying,并登录。点击“+”号,选择“New repository”创建一个新的远程仓库。
仓库名设为“HelloWorld”,并选择初始化时创建一个README文件。
在仓库信息页,点击“Clone or download”,将网址“https://github.com/Guosiying/HelloWorld.git”粘贴下来,这会在clone时用。
2.在本机E盘新建一个文件夹Test01_GitHub,在该文件夹内空白处,右击选择“Git Base Here”,进入命令行界面。
3.输入git clone https://github.com/Guosiying/HelloWorld.git命令,将远程仓库克隆到本机,本机中出现了仓库HelloWorld文件夹,此为本地仓库,在文件夹中有README.md文件。
git add/git commit/git push
先后使用这三个命令,分三步将本地仓库的内容同步到远程仓库。
git add:将修改内容从工作区添加到暂存区
git commit:将暂存区中的所有内容提交到当前的分支
git push:将分支的所有内容推送到远程仓库
1.修改本地仓库内容
在本机创建一个Hello.java文件,添加到 上步已经克隆到本机的仓库HelloWorld中(E:/Test01_GitHub/HelloWorld)。
Hello.java文件中的内容:
2.git add
在命令行界面,先进入本机HelloWorld仓库的目录,输入git add hello.java命令,将该文件从工作区添加到暂存区。
3.git commit
在命令行界面输入git commit -m "wrote a Hello file命令,把暂存区中的所有内容提交到当前分支(master)中。
注意:如果还没有配置本机的信息,在commit时,会提示配置你的邮箱地址和名字信息。
配置好信息后,再commit一次,这次就成功了。
4.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:查看修改提交的日志
1.git status
在本机修改一下Hello.java文件(添加一条输出语句)。
在命令行界面输入git status命令,查看当前仓库的状态。可以看到Hello.java文件被modified了,但是还没有被commit。
2.git diff
在命令行界面输入git diff命令,查看具体的修改内容。可以看到具体修改了文件哪一行。
再输入git add命令和git commit命令进行提交。
commit后,在git status一下。可以看到工作目录是干净的了。
再输入git push,将本次修改push到远程仓库中。
github上已经更新,此时本机仓库和远程仓库达到一致状态。
3.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。
前者将更新同步操作分为了两小步,操作了第一小步后,可以查看一下具体做了什么修改,然后再决定是否和本地分支合并,不易产生冲突。而后者是两小步一起完成,更方便了操作,但是有可能在没了解具体修改了什么内容就合并到了本地分支,若是产生了冲突,需要手动进行解决。
1.git fetch和git merge
在GitHub远程仓库中修改Hello.java文件(添加一条输入语句)。
在命令行界面输入git fetch命令。
此时git status和git diff一下,可以查看一下 远程仓库的内容和本地仓库对比做了哪些修改。
然后输入git merge命令。
查看一下本地仓库文件,本地文件完成更新。
2.git pull
在GitHub上再次修改Hello.java文件(再添加一条输出语句)。
在命令行界面输入git pull命令。
在本地可以看到已更新。
曲晗东
1、git add :就是将文件修改暂时放到版本库的暂存区
测试效果:
查看状态提示文件被修改,但是还没有提交
2、git commit :提交更改,就是把暂存区的所有内容提交到当前分支
测试效果:
查看状态提示所在分支为fea1,工作区很干净,没有待处理修改文件。
3、git push :用于将本地当前分支的更新,推送到远程主机追踪分支,完整格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
注意:第一次使用要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容,其中origin为远程主机名,也可以是别的。
测试效果:
本地git指令
git remote add origin git@github.com:QhdjiaYou/learngit.git
git push origin matser
这里因为远程只有一个与其对应的master分支,所以省略远程分支名。
查看远程仓库,文件更新内容已被同步到远程仓库中
4、git clone :git clone <版本库的网址> <本地目录名>
从远程主机克隆一个版本库到本地,一般是远程操作的第一步。
测试效果:这里使用默认与远程相同的目录名。
git clone git@github.com:little-by/CANToolApp.git
本地GIT目录下增加一个版本库和工作空间名为CANToolApp
5、git fetch 和git pull :完整指令格式如下,具体使用视情况而定
git fetch <远程主机名> <分支名>
git pull <远程主机名> <远程分支名>:<本地分支名>
两者虽然都是从远程主机取回更新分支内容,但是fetch指令只是取回远程更新内容,对自己本地开发文件并没有影响,可以有选择的新建分支或者与本地分支进行合并;而对于pull指令来说,是取回远程主机某个分支的更新,同时与本地的指定分支进行合并,实质上相当于fetch后再merge两个动作。
测试fetch效果:远程主机master分支下修改了readme.txt文件,增加Hello World!
在本地使用指令git fetch origin master
查看本地工作区间内容并没有任何变化
使用git branch -r 查看远程分支,结果如下,说明这个取回的分支内容并没有被放到工作区,只是存在本地的版本库中,我们通过查看分支能够查到。
切换分支进行查看,发现在这个远程分支中文件被修改的内容,如果觉得修改很满意,我们可以使用merge将其合并到本地master分支中,也就能在工作区显示了。
使用指令git merge origin/master,合并到本地master分支。
测试pull效果:在远程主机master分支下再次修改readme.txt文件,删除一行内容I like it very much.
使用指令git pull origin master:master
然后查看本地master分支中readme.txt中内容已经被修改
小结:fetch和pull指令各有特点,具体运用视情况而定,虽然pull指令更加方便进行合并,但它同时也会造成一些困扰,如果对于不清楚修改内容的文件直接将其合并的本地文件中,很可能导致自己的工作被覆盖,个人感觉,pull比较适合拉取一个新的远程仓库内容或者已经清楚修改内容的分支,相对来说fetch虽然需要更多的指令实现最后的合并,但运用起来更加灵活,所以如何使用应视具体情况看。
6、用markdown修改readme.md文件,增加CANToolApp需求内容
在本地master分支使用add和commit
使用git push 推送到远程master分支
查看远程github上有更新,信息是最新内容
需求文档
对项目需求的描述用Markdown写在了github项目的README.md中,网址:https://github.com/little-by/CANToolApp