Git-实验报告
“Git 实战教程”实验报告
二、比较内容 1.比较提交 - Git Diff git diff命令的作用是比较修改的或提交的文件内容。 如何查看缓存区内与上次提交之间的差别呢?需要使用--cached参数: 2.比较分支 可以用 git diff 来比较项目中任意两个分支的差异。 $ git diff master test git diff 是一个难以置信的有用的工具,可以找出你项目上任意两个提交点间的差异。可以使用git help diff详细查看其他参数和功能。 3.更多的比较选项 如果你要查看当前的工作目录与另外一个分支的差别,你可以用下面的命令执行:
# 切换到master
$ git checkout master
# 查看与test分支的区别
$ git diff test
你也以加上路径限定符,来只比较某一个文件或目录:
$ git diff test file1
--stat 参数可以统计一下有哪些文件被改动,有多少行被改动:
$ git diff test --stat
三、分布式的工作流程
1.分布式的工作流程 首先,我们假设另一个用户也用shiyanlou用户登录,只是工作在不同的目录下开发代码,实际工作中不太可能发生,大部分情况都是多个用户,这个假设只是为了让实验简化。
该用户需要从git仓库进行克隆:
# 进入到临时目录
$ cd /tmp
# 克隆git仓库
$ git clone /home/shiyanlou/gitproject myrepo
在myrepo做了一些修改并且提交:
myrepo修改完成后,如果我们想合并这份修改到gitproject的git仓库该如何做呢?
可以在仓库/home/shiyanlou/gitproject中把myrepo的修改给拉 (pull)下来。
执行下面几条命令:
$ cd /home/shiyanlou/gitproject
$ git pull /tmp/myrepo master
这就把myrepo的主分支合并到了gitproject的当前分支里了。
如果gitproject在myrepo修改文件内容的同时也做了修改的话,可能需要手工去修复冲突。
git pull命令执行两个操作: 它从远程分支(remote branch)抓取修改git fetch的内容,然后把它合并git merge进当前的分支。
gitproject里可以用git fetch 来执行git pull前半部分的工作, 但是这条命令并不会把抓下来的修改合并到当前分支里:
$ git fetch myrepo
获取后,我们可以通过git log查看远程分支做的所有修改,由于我们已经合并了所有修改,所以不会有任何输出:
$ git log -p master..myrepo/master
当检查完修改后,gitproject可以把修改合并到它的主分支中:
$ git merge myrepo/master
如果我们在myrepo目录下执行git pull会发生什么呢?
myrepo会从克隆的位置拉取代码并更新本地仓库,就是把gitproject上的修改同步到本地:
因为myrepo是从gitproject仓库克隆的,那么他就不需要指定gitproject仓库的地址。
因为Git把gitproject仓库的地址存储到myrepo的配置文件中,这个地址就是在git pull时默认使用的远程仓库:
$ git config --get remote.origin.url
如果myrepo和gitproject在不同的主机上,可以通过ssh协议来执行clone 和pull操作:
$ git clone localhost:/home/shiyanlou/gitproject test
2.公共Git仓库
开发过程中,通常大家都会使用一个公共的仓库,并clone到自己的开发环境中,完成一个阶段的代码后可以告诉目标仓库的维护者来pull自己的代码。
如果你和维护者都在同一台机器上有帐号,那么你们可以互相从对方的仓库目录里直接拉所作的修改,git命令里的仓库地址也可以是本地的某个目录名:
$ git clone /path/to/repository
$ git pull /path/to/other/repository
也可以是一个ssh地址:
$ git clone ssh://yourhost/~you/repository
3.将修改推到一个公共仓库
通过http或是git协议,其它维护者可以通过远程访问的方式抓取(fetch)你最近的修改,但是他们 没有写权限。如何将本地私有仓库的最近修改主动上传到公共仓库中呢?
最简单的办法就是用git push命令,推送本地的修改到远程Git仓库,执行下面的命令:
$ git push ssh://yourserver.com/~you/proj.git master:master
或者
$ git push ssh://yourserver.com/~you/proj.git master
git push命令的目地仓库可以是ssh或http/https协议访问。
4.当推送代码失败时要怎么办
如果推送(push)结果不是快速向前fast forward,可能会报像下面一样的错误:
error: remote 'refs/heads/master' is not an ancestor of local
'refs/heads/master'.
Maybe you are not up-to-date and need to pull first?
error: failed to push to 'ssh://yourserver.com/~you/proj.git'
这种情况通常是因为没有使用git pull获取远端仓库的最新更新,在本地修改的同时,远端仓库已经变化了(其他协作者提交了代码),
此时应该先使用git pull合并最新的修改后再执行git push:
$ git pull
$ git push ssh://yourserver.com/~you/proj.git master
四、Git标签
1.轻量级标签
我们可以用 git tag不带任何参数创建一个标签(tag)指定某个提交(commit):
# 查看git提交记录
$ git log
# 选择其中一个记录标志位stable-1的标签,注意需要将后面的8c315325替换成仓库下的真实提交内,commit的名称很长,通常我们只需要写前面8位即可
$ git tag stable-1 8c315325
# 查看当前所有tag
$ git tag stable-1
这样,我们可以用stable-1 作为提交 8c315325 的代称。 前面这样创建的是一个“轻量级标签”。
如果你想为一个tag添加注释,或是为它添加一个签名, 那么我们就需要创建一个 "标签对象"。
标签对象
git tag中使用-a, -s 或是 -u三个参数中任意一个,都会创建一个标签对象,并且需要一个标签消息(tag message)来为tag添加注释。
如果没有-m 或是 -F 这些参数,命令执行时会启动一个编辑器来让用户输入标签消息。
当这样的一条命令执行后,一个新的对象被添加到Git对象库中,并且标签引用就指向了一个标签对象,而不是指向一个提交,这就是与轻量级标签的区别。
下面是一个创建标签对象的例子:
$ git tag -a stable-2 8c315325 -m "stable 2"
$ git tag
2.签名的标签
签名标签可以让提交和标签更加完整可信。如果你配有GPG key,那么你就很容易创建签名的标签。
首先你要在你的 .git/config 或 ~/.gitconfig 里配好key。 下面是示例:
你也可以用命令行来配置:
$ git config (--global) user.signingkey <gpg-key-id>
现在你可以在创建标签的时候使用-s 参数来创建“签名的标签”:
$ git tag -s stable-1 1b2e1d63ff
如果没有在配置文件中配GPG key,你可以用-u参数直接指定。
$ git tag -u <gpg-key-id> stable-1 1b2e1d63ff
Git-实验报告的更多相关文章
- 20145206《Java程序设计》实验三实验报告
20145206<Java程序设计>实验三实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运 ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20145330《Java程序设计》第五次实验报告
20145330<Java程序设计>第五次实验报告 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴 ...
- 20145330《Java程序设计》第四次实验报告
20145330<Java程序设计>第四次实验报告 实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 搭建A ...
- 20145337实验三实验报告——敏捷开发与XP实践
20145337实验三实验报告--敏捷开发与XP实践 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 ** 实验步骤**### 敏捷开发与XP 软件工程包括下列领域:软件需求 ...
- 20145320《Java程序设计》第三次实验报告
20145320<Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.22 15: ...
- Java实验报告五:Java网络编程及安全
Java实验报告五:Java网络编程及安全 ...
- 20145227《Java程序设计》第3次实验报告
20145227<Java程序设计>第3次实验报告 实验步骤与内容 一.实验内容 XP基础 XP核心实践 相关工具 二.实验过程 (一)敏捷开发与XP 1.XP是以开发符合客户需要的软件为 ...
- 20145218 《Java程序设计》第03次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:敏捷开发与XP实践 一.实验内容 XP基础 XP核心实践 相 ...
- 《Java程序设计》实验三 实验报告
实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2 ...
随机推荐
- Dijkstra算法图文详解
Dijkstra算法 Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不 ...
- Codeforces 852D
数目规模大,尝试转换为判定性问题,那么E就不影响到网络流的复杂度了 SPFA码歪了,WA了好几发气死了 #include<bits/stdc++.h> using namespace st ...
- Cmder光标错位的问题&VSCode终端光标错位问题
问题 本机中安装了 Cmder,几乎是0配置 ,同时在 VSCode 中设置默认终端为 Cmder,在 VSCode 中打开终端,显示如图: 这里光标实际的位置是 . 的后面,但是表现出来的是多一个空 ...
- 移动测试之appium+python 入门代码(二)
ps: 对于环境安装可能会碰到各种问题,还是要一一解决. 执行: appium-doctor 显示上边界面说明,环境已完成. 同时将手机连接主机(用数据线) ^_^ 执行 adb devices 显示 ...
- =与==、&与&&、| 与 || 的区别
=与== =属于赋值运算符,将右侧的值赋给左侧的变量名称 ==属于关系运算符,判断左右两边值是否相等,结果为boolean类型 &与&& &是逻辑与,&& ...
- LitJson(读Exce文件写入到json文件):
读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...
- Android 中实现分享和第三方登陆---以新浪微博为例
第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...
- jQuery源代码学习笔记_bind
一般想到JS的兼容性问题的时候,首先会想到addEventListener与attachEvent这一对冤家,那么我们先来看看它们有什么兼容性问题 addEventListener与attachEve ...
- jQuery源码浅析2–奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Session有什么重大BUG,有什么方法可以解决
[考点]ASP.NET中Session的多种保存方法.[出现频率]★★★☆☆[解答]使用进程内会话状态模式时,如果aspnet_wp.exe或应用程序域重新启动,则会话状态数据将丢失.可以用Sate ...