因为驱动器电板的线路短路导致出现故障。解决步骤如下:
1、第一步是在关闭系统后释放剩余的电力。在打开外壳和摆弄硬件之前,关闭总电源开关,并按住电源按钮几秒钟,释放剩余电量。
2、下一步是为HDD和SSD使用SATA连接器,这样就没有什么可以区分两个驱动器输入。注意,SATA线缆将有两个连接器。
3、然后是以4针的形式进行的MOLEX电源连接器,用SATA驱动器DAO连接器,注意要用MOLEXSATA电源线。
4、下一步是使用Molex(4针)到SATA电源适配器。请注意,硬盘驱动器和固态驱动器需要一根橙色33V的电线来驱动电子设备。
5、最后一步是重新启动Delta伺服驱动器,发现故障已经解决,可以正常工作,如下图所示。
IP简介Internet 上的每台主机(Host)都有一个唯一的IP地址。IP协议就是使用这个地址在主机之间传递信息,这是Internet 能够运行的基础。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如15922611。IP地址有两部分组成,一部分为网络地址,另一部分为主机地址。IP地址分为A、B、C、D、E5类。常用的是B和C两类。ip地址就像是我们的家庭住址一样,如果你要写信给一个人,你就要知道他(她)的地址,这样邮递员才能把信送到,计算机发送信息是就好比是邮递员,它必须知道唯一的“家庭地址”才能不至于把信送错人家。只不过我们的地址使用文字来表示的,计算机的地址用十进制数字表示。
众所周知,在电话通讯中,电话用户是靠电话号码来识别的。同样,在网络中为了区别不同的计算机,也需要给计算机指定一个号码,这个号码就是“IP地址”。
什么是IP地址
所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。
按照TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“”分开不同的字节。于是,上面的IP地址可以表示为“10001”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。
有人会以为,一台计算机只能有一个IP地址,这种观点是错误的。我们可以指定一台计算机具有多个IP地址,因此在访问互联网时,不要以为一个IP地址就是一台计算机;另外,通过特定的技术,也可以使多台服务器共用一个IP地址,这些服务器在用户看起来就像一台主机似的。
将IP地址分成了网络号和主机号两部分,设计者就必须决定每部分包含多少位。网络号的位数直接决定了可以分配的网络数(计算方法2^网络号位数);主机号的位数则决定了网络中最大的主机数(计算方法2^主机号位数-2)。然而,由于整个互联网所包含的网络规模可能比较大,也可能比较小,设计者最后聪明的选择了一种灵活的方案:将IP地址空间划分成不同的类别,每一类具有不同的网络号位数和主机号位数。
如何分配IP地址
TCP/IP协议需要针对不同的网络进行不同的设置,且每个节点一般需要一个“IP地址”、一个“子网掩码”、一个“默认网关”。不过,可以通过动态主机配置协议(DHCP),给客户端自动分配一个IP地址,避免了出错,也简化了TCP/IP协议的设置。
那么,局域网怎么分配IP地址呢?互联网上的IP地址统一由一个叫“IANA”(Internet Assigned Numbers Authority,互联网网络号分配机构)的组织来管理。
IP是什么?
——IP是当前热门的技术。与此相关联的一批新名词,如IP网络、IP交换、IP电话、IP传真等等,也相继出现。那么,IP是什么呢?
——IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。
——IP是怎样实现网络互连的?各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为“帧”)的格式不同。IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据报”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。
——那么,“数据报”是什么?它又有什么特点呢?数据报也是分组交换的一种形式,就是把所传送的数据分段打成“包”,再传送出去。但是,与传统的“连接型”分组交换不同,它属于“无连接型”,是把打成的每个“包”(分组)都作为一个“独立的报文”传送出去,所以叫做“数据报”。这样,在开始通信之前就不需要先连接好一条电路,各个数据报不一定都通过同一条路径传输,所以叫做“无连接型”。这一特点非常重要,它大大提高了网络的坚固性和安全性。
——每个数据报都有报头和报文这两个部分,报头中有目的地址等必要内容,使每个数据报不经过同样的路径都能准确地到达目的地。在目的地重新组合还原成原来发送的数据。这就要IP具有分组打包和集合组装的功能。
——在实际传送过程中,数据报还要能根据所经过网络规定的分组大小来改变数据报的长度,IP数据报的最大长度可达65535个字节。
——IP协议中还有一个非常重要的内容,那就是给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上 *** 作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。
——现在电信网正在与IP网走向融合,以IP为基础的新技术是热门的技术,如用IP网络传送话音的技术(即VoIP)就很热门,其它如IP over ATM、IPover SDH、IP over WDM等等,都是IP技术的研究重点。
IP地址类型
最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
IP地址分类
1.A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从0001 到126000。可用的A类网络有126个,每个网络能容纳1亿多个主机。
2.B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128000到191255255255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3.C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192000到223255255255。C类网络可达209万余个,每个网络能容纳254个主机。
4.D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
5.E类IP地址
以“llll0”开始,为将来使用保留。
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
IP地址是由什么机构分配的
所有的IP地址都由国际组织NIC(Network Information Center)负责统一分配,目前全世界共有三个这样的网络信息中心。
InterNIC:负责美国及其他地区;
ENIC:负责欧洲地区;
APNIC:负责亚太地区。
我国申请IP地址要通过APNIC,APNIC的总部设在日本东京大学。申请时要考虑申请哪一类的IP地址,然后向国内的代理机构提出。
什么是公有地址和私有地址
公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
以下列出留用的内部私有地址
A类 10000--10255255255
B类 1721600--17231255255
C类 19216800--192168255255
保留IP地址
最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
查找Ip有个cmd命令:tracert 后面加ip地址,可以查所经过的路由!首先我们分别在Git服务器和客户机中安装Git服务程序(刚刚实验安装过就不用安装了):
[root@linuxprobe ~]# yum install git
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management You can use subscription-manager to register
Package git-1831-4el7x86_64 already installed and latest version
Nothing to do
然后创建Git版本仓库,一般规范的方式要以git为后缀:
[root@linuxprobe ~]# mkdir linuxprobegit
修改Git版本仓库的所有者与所有组:
[root@linuxprobe ~]# chown -Rf git:git linuxprobegit/
初始化Git版本仓库:
[root@linuxprobe ~]# cd linuxprobegit/
[root@linuxprobe linuxprobegit]# git --bare init
Initialized empty Git repository in /root/linuxprobegit/
其实此时你的Git服务器就已经部署好了,但用户还不能向你推送数据,也不能克隆你的Git版本仓库,因为我们要在服务器上开放至少一种支持Git的协议,比如>
1、红旗Linux
红旗linux是中国较大、较成熟的Linux发行版之一,也是国产较出名的 *** 作系统,与日本、韩
国的Linux厂商,共同推出了AsianuxServer,并且拥有完善的教育系统和认证系统。
2、中兴新支点 *** 作系统
中兴新支点 *** 作系统基于Linux稳定内核,分为嵌入式 *** 作系统(NewStart CGEL)、服务器 ***
作系统(NewStart CGSL)、桌面 *** 作系统(NewStart NSDL)。
3、深度(Deepin)
deepin是一份致力于为全球用户提供美观、易用、安全、免费的使用环境的Linux发行版。它
不仅仅包括对全球优秀开源产品进行的集成和配置,还开发了基于Qt5技术的深度桌面环境、
基于Qt5技术的自主UI库DTK、系统设置中心,以及音乐播放器、视频播放器、软件中心等一
系列面向普通用户的应用程序。
4、普华Linux(i-soft)
普华Linux是由普华基础软件股份有限公司开发的一系列Linux发行版, 包括桌面版、服务
器版、国产CPU系列版本,IBM Power服务器版、HA和虚拟化系列等产品。
5、威科乐恩Linux
WiOS是由威科乐恩(北京)科技有限公司开发的一服务器 *** 作系统,旨在帮助企业无缝
地过渡到包含虚拟化和云计算的新兴数据中心模式。
6银河麒麟
银河麒麟:是由国防科技大学、中软公司、联想公司、浪潮集团和民族恒星公司合作研制的闭
源服务器 *** 作系统。此 *** 作系统是863计划重大攻关科研项目,目标是打破国外 *** 作系统的垄
断,银河麒麟研发一套中国自主知识产权的服务器 *** 作系统。银河麒麟完全版共包括实时版、
安全版、服务器版三个版本,简化版是基于服务器版简化而成的。
7、中标麒麟Linux(原中标普华Linux)
中标麒麟Linux桌面软件是上海中标软件有限公司发布的面向桌面应用的 *** 作系统产品。
8、起点 *** 作系统StartOS(原雨林木风 *** 作系统YLMF OS)
StartOS----是由东莞瓦力网络科技有限公司发行的开源 *** 作系统,其前身是由广东雨林木风计
算机科技有限公司ylmf os开发组所研发的ylmf os,符合国人的使用习惯,预装常用的精品软
件, *** 作系统具有运行速度快,安全稳定,界面美观, *** 作简洁明快等特点。
9、凝思磐石安全 *** 作系统
凝思磐石安全 *** 作系统:是由北京凝思科技有限公司开发,凝思磐石安全 *** 作系统遵循国内外
安全 *** 作系统GB17859、GB/T18336、GJB4936、GJB4937、GB/T20272以及POSIX、凝思
磐石安全 *** 作系统TCSEC、ISO15408等标准进行设计和实现。
10、一铭 *** 作系统
一铭 *** 作系统(YMOS)是一铭软件股份有限公司在龙鑫 *** 作系统基础上推出的系统软件,是
2013、2014、2015年度中央机关政府协议供应产品,列入全国各级省市的政府采购目录。产
品基于国家Linux标准开发,贴合国人的使用习惯,在系统安装、用户界面、中文支持和安全
防御等方面进行了优化和升级,一铭 *** 作系统(YMOS)集成了常用的办公软件、应用软件和
配置管理工具,支持部分Windows平台应用软件直接使用。
扩展资料:
国际主流的 *** 作系统
1、微软的window10 *** 作系统
Windows 10是美国微软公司研发的跨平台及设备应用的 *** 作系统。是微软发布的最后一个独
立Windows版本。Windows 10共有7个发行版本,分别面向不同用户和设备。
2、苹果的macOS Sierra系统
MacOS Sierra(1012版本)是2016年6月苹果在全球开发者大会(WWDC 2016)发布的新一
代Mac *** 作系统,该版本延续了前代扁平化的设计风格,并在功能上进行了诸多改进与优化。
3、谷歌的ChromeOS系统
Chrome OS是一款Google开发的基于PC的 *** 作系统。 Google Chrome OS是一款基于Linux
的开源 *** 作系统。Google在自己的官方博客表示,初期,这一 *** 作系统将定位于上网本、紧凑
型以及低成本电脑。
4、CentOS *** 作系统
CentOS(Community Enterprise Operating System,中文意思是:社区企业 *** 作系统)是
Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所
编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版
的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
5、OpenSolaris *** 作系统
OpenSolaris是一个由SUN公司(现已被Oracle收购)所发起的开放源码 *** 作系统项目,用来
建立以Solaris *** 作系统为主的开发者社群,专案的适用对象主要是开发者(也就是软件设计
师、程序员)、系统管理者(资讯管理师、资管师、资管员)以及使用者(用户),透过这些
人期望能使Solaris获得进一步的发展与强化。
6、Ubuntu *** 作系统
ubuntu系统基于Debian发行版和GNOME桌面环境。Ubuntu的目标在于为一般用户提供一个
最新的、同时又相当稳定的主要由自由软件构建而成的 *** 作系统,它可免费使用,并带有社团
及专业的支持。
7、UbuntuKylin中国定制版优麒麟
UbuntuKylin是Ubuntu社区中面向中文用户的Ubuntu衍生版本,中文名称优麒麟,与麒麟系
统没有关系。项目的发起者承诺在用户体验、功能、技术支持等方面为中文用户提供高品质的
产品和服务。
百度百科——国产 *** 作系统
为啥能干掉2个月的?因为是个人没事做着玩的所以2个月一直没提交过。
工作环境 是 win10+sourcetree+git+unreal工程
记得那是一个朦朦胧胧的清晨(雾霾),我兴奋的从床上跳了起来(我的项目终于告一段落)。我打开电脑,打开sourcetree提交一下以免夜长梦多。
我整理了文件并且对比了变化。把整理过的文件add了一下,然后成功的commit(都TMD的是错觉 sourcetree bug了根本没add成功)之后我点击了push。。然后sourcetree 提示了一堆异常,其中有一条叫我用终端执行 git reset --hard 理由是我的工作区有垃圾文件,叫我清空下!
我不由自主的考虑了一下,
听sourcetree的,你说执行就执行~
然后我打开了终端执行了那条命令之后突然感觉哪里不对
我打开工作目录发现git清空了我2个月的项目,什么都没有了,真TMD的干净。
然后我去网上搜索如何找回。发现了好多方法,比如git reflog 这样就能看见自己的所有commit
然后在 git reset --hard 后面写上你想要的commit id 就能找到文件
然后我执行完 git reflog后 发现根本没有我最后的那次提交。突然间恍然大悟,刚刚sourcetree 可能bug了导致commit失败了
然后我发现了另一条命令 git fsck --lost-found 执行后会出现一堆文件 在 git/lost-found 文件夹里 不过是这个样子的
网上老哥说了 用 git show 2e43cd56ee4fb08664cd843cd32836b54fbf594a 就能看见内容
原来 2进制的文件看不见
然后我再次发现了新命令 find git/objects -type f | xargs ls -lt | sed 110q q前面是你要打印的行
这个命令已经脱离git了,他是终端的一个 查找命令 就是查找 git/objects 文件夹下的普通文件 按照时间排序后 打印在终端里 sed 110q 是你要打印多少行。
要看懂这个命令就需要了解git底层的工作原理
讲一下git 原理
GIT对象模型
SHA
所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的,对象名看起来像这样:
6ff87c4664981e4397625791c8ea3bbb5f2279a3
你会在Git里到处看到这种“40个字符”字符串。每一个“对象名”都是对“对象”内容做SHA1哈希计算得来的,(SHA1是一种密码学的哈希算法)。这样就意味着两个不同内容的对象不可能有相同的“对象名”。
这样做会有几个好处:
Git只要比较对象名,就可以很快的判断两个对象是否相同。
因为在每个仓库(repository)的“对象名”的计算方法都完全一样,如果同样的内容存在两个不同的仓库中,就会存在相同的“对象名”下。
Git还可以通过检查对象内容的SHA1的哈希值和“对象名”是否相同,来判断对象内容是否正确。
对象
每个对象(object) 包括三个部分: 类型 , 大小 和 内容 。大小就是指内容的大小,内容取决于对象的类型,有四种类型的对象:"blob"、"tree"、 "commit" 和"tag"。
“blob” 用来存储文件数据,通常是一个文件。
“tree” 有点像一个目录,它管理一些 “tree” 或是 “blob” (就像文件和子目录)
一个 “commit” 只指向一个"tree",它用来标记项目某一个特定时间点的状态。它包括一些关于时间点的元数据,如时间戳、最近一次提交的作者、指向上次提交(commits)的指针等等。
一个 “tag” 是来标记某一个提交(commit) 的方法。
几乎所有的Git功能都是使用这四个简单的对象类型来完成的。它就像是在你本机的文件系统之上构建一个小的文件系统。
与SVN的区别
Git与你熟悉的大部分版本控制系统的差别是很大的。也许你熟悉Subversion、CVS、Perforce、Mercurial 等等,他们使用 “增量文件系统” (Delta Storage systems), 就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。这会是在使用Git时的一个很重要的理念。
Blob对象
一个blob通常用来存储文件的内容
你可以使用 git show 命令来查看一个blob对象里的内容。假设我们现在有一个Blob对象的SHA1哈希值,我们可以通过下面的的命令来查看内容:
$ git show 6ff87c4664
Note that the only valid version of the GPL as far as this project
is concerned is _this_ particular version of the license (ie v2, not
v22 or v3x or whatever), unless explicitly otherwise stated
一个"blob对象"就是一块二进制数据,它没有指向任何东西或有任何其它属性,甚至连文件名都没有
因为blob对象内容全部都是数据,如两个文件在一个目录树(或是一个版本仓库)中有同样的数据内容,那么它们将会共享同一个blob对象。Blob对象和其所对应的文件所在路径、文件名是否改被更改都完全没有关系。
Tree 对象
一个tree对象有一串(bunch)指向blob对象或是其它tree对象的指针,它一般用来表示内容之间的目录层次关系。
git show 命令还可以用来查看tree对象,但是 git ls-tree 能让你看到更多的细节。如果我们有一个tree对象的SHA1哈希值,我们可以像下面一样来查看它:
$ git ls-tree fb3a8bdd0ce
100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c gitignore
100644 blob 5529b198e8d14decbe4ad99db3f7fb632de0439d mailmap
100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 COPYING
040000 tree 2fb783e477100ce076f6bf57e4a6f026013dc745 Documentation
100755 blob 3c0032cec592a765692234f1cba47dfdcc3a9200 GIT-VERSION-GEN
100644 blob 289b046a443c0647624607d471289b2c7dcd470b INSTALL
100644 blob 4eb463797adc693dc168b926b6932ff53f17d0b1 Makefile
100644 blob 548142c327a6790ff8821d67c2ee1eff7a656b52 README
就如同你所见,一个tree对象包括一串(list)条目,每一个条目包括:mode、对象类型、SHA1值 和名字(这串条目是按名字排序的)。它用来表示一个目录树的内容。
一个tree对象可以指向(reference): 一个包含文件内容的blob对象, 也可以是其它包含某个子目录内容的其它tree对象 Tree对象、blob对象和其它所有的对象一样,都用其内容的SHA1哈希值来命名的;只有当两个tree对象的内容完全相同(包括其所指向所有子对象)时,它的名字才会一样,反之亦然。这样就能让Git仅仅通过比较两个相关的tree对象的名字是否相同,来快速的判断其内容是否不同。
(注意:在submodules里,trees对象也可以指向commits对象 请参见 Submodules 章节)
注意:所有的文件的mode位都是644 或 755,这意味着Git只关心文件的可执行位
Commit对象
"commit对象"指向一个"tree对象", 并且带有相关的描述信息
你可以用 --pretty=raw 参数来配合 git show 或 git log 去查看某个提交(commit):
$ git show -s --pretty=raw 2be7fcb476
commit 2be7fcb4764f2dbcee52635b91fedb1b3dcf7ab4
tree fb3a8bdd0ceddd019615af4d57a53f43d8cee2bf
parent 257a84d9d02e90447b149af58b271c19405edb6a
author Dave Watson 1187576872 -0400
committer Junio C Hamano 1187591163 -0700
Fix misspelling of 'suppress' in docs
Signed-off-by: Junio C Hamano
你可以看到, 一个提交(commit)由以下的部分组成:
一个 tree 对象: tree对象的SHA1签名, 代表着目录在某一时间点的内容
父对象 (parent(s)): 提交(commit)的SHA1签名代表着当前提交前一步的项目历史 上面的那个例子就只有一个父对象; 合并的提交(merge commits)可能会有不只一个父对象 如果一个提交没有父对象, 那么我们就叫它“根提交"(root commit), 它就代表着项目最初的一个版本(revision) 每个项目必须有至少有一个“根提交"(root commit) 一个项目可能有多个"根提交“,虽然这并不常见(这不是好的作法)
作者 : 做了此次修改的人的名字, 还有修改日期
提交者 (committer): 实际创建提交(commit)的人的名字, 同时也带有提交日期 TA可能会和作者不是同一个人; 例如作者写一个补丁(patch)并把它用邮件发给提交者, 由他来创建提交(commit)
- 注释 用来描述此次提交
注意: 一个提交(commit)本身并没有包括任何信息来说明其做了哪些修改; 所有的修改(changes)都是通过与父提交(parents)的内容比较而得出的 值得一提的是, 尽管git可以检测到文件内容不变而路径改变的情况, 但是它不会去显式(explicitly)的记录文件的更名 *** 作 (你可以看一下 git diff 的 -M 参数的用法)
一般用 git commit 来创建一个提交(commit), 这个提交(commit)的父对象一般是当前分支(current HEAD), 同时把存储在当前索引(index)的内容全部提交
对象模型
现在我们已经了解了3种主要对象类型(blob, tree 和 commit), 好现在就让我们大概了解一下它们怎么组合到一起的
如果我们一个小项目, 有如下的目录结构:
$>tree
|-- README
`-- lib
|-- inc
| `-- tricksrb
`-- mylibrb
2 directories, 3 files
如果我们把它提交(commit)到一个Git仓库中, 在Git中它们也许看起来就如下图:
你可以看到: 每个目录都创建了 tree对象 (包括根目录), 每个文件都创建了一个对应的 blob对象 最后有一个 commit对象 来指向根tree对象(root of trees), 这样我们就可以追踪项目每一项提交内容
标签对象
一个标签对象包括一个对象名(译者注:就是SHA1签名), 对象类型, 标签名, 标签创建人的名字("tagger"), 还有一条可能包含有签名(signature)的消息 你可以用 git cat-file 命令来查看这些信息:
$ git cat-file tag v150
object 437b1b20df4b356c9342dac8d38849f24ef44f27
type commit
tag v150
tagger Junio C Hamano 1171411200 +0000
GIT 150
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v146 (GNU/Linux)
iD8DBQBF0lGqwMbZpPMRm5oRAuRiAJ9ohBLd7s2kqjkKlq1qqC57SbnmzQCdG4ui
nLE/L9aUXdWeTFPron96DLA=
=2E+0
-----END PGP SIGNATURE-----
点击 git tag , 可以了解如何创建和验证标签对象 (注意: git tag 同样也可以用来创建 "轻量级的标签"(lightweight tags), 但它们并不是标签对象, 而只一些以 "refs/tags/" 开头的引用罢了)
然后我从这一堆文件里整理出了 tree文件 并且总结出了规律
运行 find git/objects -tpe f | xargs ls -lt | sed 100q 后会得到最近改动的100个文件
-r--r--r-- 1 qipaworld 197608 57103 3月 25 07:23 git/objects/31/68e9047b751d98f7c280dab676cff4af3cb8f6 文件以这种形式显示在终端里
git cat-file -t 3168e9047b751d98f7c280dab676cff4af3cb8f6 就能看见文件类型 把最后一个/去掉 复制从objects/ 后面的所有东西放在-t后面
然后找到tree类型的文件
每个红框框选的区域里的类型应该是同一种,选一个cat 一下看看就行了
找到tree后 git cat-file -p 4452fd53aa36018b20a6556dc3649f50a4be4561 ^{tree}
就能看见tree里面的结构
然后就能知道 哪个blob对应哪个文件了。是不是很屌?
我搞了一晚上终于找到了某个tree并且跟到了文件目录。然后发现并没有我的项目文件,当时已经是半夜12点多了,我静静的看着屏幕
我连add都没成功就提示我commit成功了
以后谁叫你 reset --hard你就干他,别问我为什么
最终结果就是项目消失了,但是还好unreal 有自动保存功能,而自动保存的文件目录被我加到了git忽略列表里。找回了一部分
最后加一些git常用命令
查看、添加、提交、删除、找回,重置修改文件
git help # 显示command的help
git show # 显示某次提交的内容 git show $id
git co -- # 抛弃工作区修改
git co # 抛弃工作区修改
git add # 将工作文件修改提交到本地暂存区
git add # 将所有修改过的工作文件提交暂存区
git rm # 从版本库中删除文件
git rm --cached # 从版本库中删除文件,但不删除文件
git reset # 从暂存区恢复到工作文件
git reset -- # 从暂存区恢复到工作文件
git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git ci git ci git ci -a # 将git add, git rm和git ci等 *** 作都合并在一起做git ci -am "some comments"
git ci --amend # 修改最后一次提交记录
git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象
git revert HEAD # 恢复最后一次提交的状态
查看文件diff
git diff # 比较当前文件和暂存区文件差异 git diff
git diff # 比较两次提交之间的差异
git diff # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息
查看提交记录
git log git log # 查看该文件每次提交记录
git log -p # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat #查看提交统计信息
tig
Mac上可以使用tig代替diff和log,brew install tig
Git 本地分支管理
查看、切换、创建和删除分支
git br -r # 查看远程分支
git br # 创建新的分支
git br -v # 查看各个分支最后提交信息
git br --merged # 查看已经被合并到当前分支的分支
git br --no-merged # 查看尚未被合并到当前分支的分支
git co # 切换到某个分支
git co -b # 创建新的分支,并且切换过去
git co -b # 基于branch创建新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git co $id -b # 把某次历史提交记录checkout出来,创建成一个分支
git br -d # 删除某个分支
git br -D # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
分支合并和rebase
git merge # 将branch分支合并到当前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master # 将master rebase到branch,相当于: git co && git rebase master && git co master && git merge
Git补丁管理(方便在多台机器上开发同步时用)
git diff > /syncpatch # 生成补丁
git apply /syncpatch # 打补丁
git apply --check /syncpatch #测试补丁能否成功
Git暂存管理
git stash # 暂存
git stash list # 列所有stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区
Git远程分支管理
git pull # 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支
git co -b origin/ # 基于远程分支创建本地分支,功能同上
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin # 创建远程分支, origin是远程仓库名
git push origin : # 创建远程分支
git push origin : #先删除本地分支(git br -d ),然后再push删除远程分支
Git远程仓库管理
GitHub
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@ github:robbin/robbin_sitegit # 添加远程仓库地址
git remote set-url origin git@ githubcom:robbin/robbin_sitegit # 设置远程仓库地址(用于修改远程仓库地址) git remote rm # 删除远程仓库
创建远程仓库
git clone --bare robbin_site robbin_sitegit # 用带版本的项目创建纯版本仓库
scp -r my_projectgit git@ gitcsdnnet:~ # 将纯仓库上传到服务器上
mkdir robbin_sitegit && cd robbin_sitegit && git --bare init # 在服务器创建纯仓库
git remote add origin git@ githubcom:robbin/robbin_sitegit # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支
也可以命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
点击这里可以看到作者的其他文章
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)