Git-初步_yjkwf的博客-CSDN博客


本站和网页 https://blog.csdn.net/yjkwf/article/details/7526340 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Git-初步_yjkwf的博客-CSDN博客
Git-初步
yjkwf
于 2012-05-01 21:48:52 发布
2424
收藏
文章标签:
testing
git
branch
tree
数据仓库
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yjkwf/article/details/7526340
版权
关于Git工作区、暂存区、版本库几个概念用一张图片来说明:
对于上图的9点说明:
1、图中左侧为工作区,右侧为版本库。在版本库中标记为index的区域是暂存区,标记为master的是master分支所代表的目录树。
2、图中可以看出,此时HEAD实际是指向master分支的一个“游标”,所以图示的命令中出现HEAD的地方可以用master来替换
3、图中的objects标示的区域为git的对象库,实际位于.git/objects目录下
4、当对工作区修改(新增)的文件执行git add命令时,
4.1、暂存区的目录树会被更新4.2、工作区修改(新增)的文件内容会被写入到对象库的一个新对象中4.3、该对象的ID被记录在暂存区的文件索引中
5、当执行提交(git commit)操作时
5.1、暂存区的目录树会写到版本库(对象库)中5.2、master分支会做响应的更新,即master最新指向的目录树就是提交时原暂存区的目录树
6、当执行 git reset HEAD 命令时
6.1、暂存区的目录树会被重写,会被master分支指向的目录树所替换,但是工作区不受影响
7、当执行git rm --cached <file> 命令时
7.1、直接从暂存区删除文件,工作区则不会改变
8、当执行 git checkout . 或者 git checkout -- <file>命令时:
8.1、会用暂存区全部的文件或者指定的文件替换工作区的文件,这个操作很危险,会清除工作区中未添加到暂存区的改动。
9、当执行 git checkout HEAD . 或 git checkout HEAD <file>命令时
9.1、用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是危险的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
关于git diff命令的说明,如下图所示:
通过使用不同的参数调用git diff命令,可以对工作区、暂存区和HEAD中的内容进行比较,上图就展示了不同的git diff命令的作用范围。
一、
You Job is create text File.
版本控制软件用来回朔自己所做的修改。
Git采用的方式是,对文件做的每一点细微的改动,都单独保存为一个新的文件,然后对该文件用SHA1加密算法压缩,任何一个文件都可以被该算法压缩成20个字节。
也就是说,有2的160次方个文件。压缩后的文件就像原文件的指纹。
SHA1 文件名 //不管多大的文件经过该命令后,就生成了20个字节用来代表原文件。
Git is at it's heart very stupid simple.  Git从本质上来说非常简单。愚蠢的简单、精妙的设计
道生一、一生二、二生三、三生万物。
Git的学习还是从底层的模型、原理学起。这样的学习曲线能更容易掌握。
================================================================
二、
Git的由来,由linux内核的开发者所创造。
Git的意思:“Git  which is British English slang fora stupid or unpleasant person.”
linux下的安装:
1、在线安装:$apt-get install git-core
2、离线安装:
wget http://git-core.googlecode.com/files/git-1.7.7.1.tar.gz
tar -zxvf git git-1.7.7.1.tar.gz
cd git-1.7.7.1
===============================================================
三、
1、初始化仓库repository
git init
2、提交自己的name 和 邮件地址【对文件的修改人的记录】说明,以后对源码的提交和修改都是这个人做的。可以通过email联系到修改人。
git config --global user.name 'yinjk'
git config --global user.email 'yinjk@neusoft.com'
3、刚才提交的信息在哪儿放着呢?
cd ~转到家目录,在家目录下有一个.gitconfig文件,其中包含了我们在第二步种添加的信息。
4、cd - 回到我们刚才的的工作目录
5、在工作目录的.git目录下也有一个config文件
然后,执行 git config user.name 'fangchengping'
git config user.email fangchengping@neusoft.com
注意观察config文件内的变化,多了刚才添加的人员信息。
说明:git有2个配置文件,一个在家目录下,为全局的配置文件,一个在仓库的根目录下有一个配置文件。有的还在/etc目录下有配置文件。
------------------------------------------------
git的三个区域
1、Repository  //执行git init 之后生成的一个空的仓库,我们将来所有的代码都放到该仓库中...,如果将来想copy仓库到某地方,只要copy该目录.git到其它地方即可。
2、Working directory //就是我们刚才建立main.c所在的目录,只不过main.c没有被git管理起来
3、Staging area / index  //在你Working directory中的内容要提交到仓库中,不能一步到位,而是先提交到该Stage area区,之后才能提交到Repository数据仓库中
命令:git add '文件名"放到Staging area,然后git commit ,把文件放到Repository数据仓库中。
如: git add main.c  //执行该命令后,在.git目录下面多了一个index文件
git commit -m "Init Project"//-m 后面接着的是你提交文件时的一些注释信息,供以后自己查看 【多了一个logs目录和一个COMMIT_EDITMSG文件】
----------------------------------------------------
对于以上的操作,我们已经把main.c提交到repository中了,现在把working directory中的main.c删除,然后从仓库里面检出来如下:
rm main.c
git checkout -f HEAD //在工作目录下就又找到了main.c
.git目录是真正的文件所在,要是把.git目录拿到别的地方,也可以直接使用该数据仓库中的文件,工作目录中的文件只是该文件的一个快照。所以丢失了无所谓,只要通过上面的命令就可以找回来
-----------------------------------
git的核心对象
每一个对象包含3部分:类型、大小、内容。
Every object consists of three things -- a type , a size and  content .The size is simply the size of contents,the contents depends on what type of object it is.and there are three different types of object.
git包括3种类型的对象:
blob:用于存储文件数据,通常是一个文件,树中的叶子节点
tree:像一个目录,它是一些其它树和叶子blob的集合。
      Tree is a simple object that has a bunch of pointers to blobs and other trees -- it generally represents the contents of a directory or sub directory.
commit:point to a single tree.making it as what the project looked like at a certain point in time.
      Commit object points to a single tree,marking it as what the project looked like at a certain point in time.it contains meta-information about that point in time,such as a timestamp,the author of the changes since the last commit ,a pointer to the previous commit ,etc.
通过命令 git show -s --pretty=raw "commint对象哈希值的前几位",可以查看commit对象的内容。
-------------------------------------
命令:git hash-object main.c //计算main.c文件的哈希值
git add . //把文件main.c加入到Staging area中 ,然后在.git/object/目录下面有一个fc目录,正好跟我们对文件main.c得到的哈希值的前俩个字母相同。然后进入该目录查看,看到里面有个文件,文件名正哈就是剩下的那38个字母。O(∩_∩)O哈哈~。它就是上面提到的blob对象,然而在该目录下面还有2个文件,他们分别代表tree对象和commit对象。
在工作目录总输入git show "哈希值的前几位" //只要跟其它的文件能区分开就可以。这个命令就可以看见刚才提交的文件的内容了。
要想查看.git/objects/目录下面的文件到底是blob、tree还是commit只用用命令git cat-file -t "哈希值的前几位"就可知道到底是何种git对象了。
我们查看一个tree对象包含的内容用如下命令:git ls-tree "tree对象哈希值的前几位",就可以看到该tree对象的内容。tree对象保存blob对象的名字。
----------------------------------------
4讲:
Tag object 
The tag object is a way to mark a specific commit as special in some way.it is normally used to tag certain commits as specific release or somethings along those lines.
5讲:
find .git/objects/ -type f | wc -l 查看查找的目录下有几个文件
git commit -a -m "message commit"  合并了git add 和 git commit 命令 参数-a 说明提交当前目录下所有修改过的文件。
打标签:保存过程中的某一状态,只要指定一个名字就能提取出来,用来代替hash值。
ls -al .git/refs/tags/ 发现该目录是空的,然后我们用命令gti tag v1.0来打一个tag,然后这个目录下就有内容了。里面多了v1.0,其内容为一个当前状态下的commit,该对象为commint类型。刚才打的tag为轻量级tag,在objects目录下对象数量并不会增加。
git tag -a milestone1.0 -m "this is first stable version"重量级的tag在objects目录下的对象数量增加了1。在.git/refs/tags/目录下面增加了一个对象【该对象的类型为tag类型,指向了/objects/目录下的tag对象,而该对象指向了真正的commit对象】的同时在objects/目录下对象的数量也增加了1。
通过tag把内容提取出来:
cat .git/HEAD
cat .git/refs/heads/master
cat .git/refs/tags/v1.0
通过上述命令可以看到tag下的commit和heads下的commit是不一样的,现在我们把tag指定的内容提取出来:
git archive --format=tar --prefix=ruby/ v1.0 | gzip > /tmp/ruby1.0.tar.gz
git checkout v1.0
6讲:分支、合并 讲解
master是一个分支,而且是一个缺省分支。指向当前的工作commit
查看当前的分支用命令:git branch //该命令列出的结果前面打*的说明是当前使用的分支。在.git目录下面有一个HEAD文件,该文件是一个文本文件,其内容为refs/heads/master,然后查看master文件的内容,发现其为一commit,即为当前活动的分支。
基于当前的commit创建了一个分支,用命令git branch testing
cat .git/HEAD  //保存了master所指向的commit,指向活动的分支
.git/refs/heads  //该目录下是所有的分支,包括master 、branch等等....
git checkout testing //切换到testing分支,即当前活动的分支变为testing,现在再看一下HEAD,发现HEAD已经指向了testing
用命令git branch testing创建testing分支之后,在看.git/refs/heads/目录下的master和testing指向的内容就不一样了,新的分支开始朝另外一个方向走了。
验证:
现在已经有了2个分支,master和testing,当前活动分支为testing,看看某文件内容,然后在用命令git checkout master切换到master分支,在看看某文件内容是不一样的,o(∩_∩)o...
合并操作:
现在在master分支下面执行命令git merge testing就把在testing分支下面做的修改合并到master分支下面了。
刚才做了把testing分支删除的操作,testing分支已经没有用处了,现在可以删除了,用命令git branch -D testing删除testing分支。
2个分支修改了同一个文件的合并【有冲突的情况下合并操作】:
一个当前分支下,又创建了另外一个分支,新的分支对文件进行了修改。这种情况下的merge非常简单,只要执行命令git merge tempbr即可。其实本质是把master重新指向了新的commit从而完成了merge。
两个分支有同一个父节点的时候,这种情况下,合并是比较复杂的,有各种各样的合并算法。
yjkwf
关注
关注
点赞
收藏
打赏
评论
Git-初步
一、You Job is create text File.版本控制软件用来回朔自己所做的修改。Git采用的方式是,对文件做的每一点细微的改动,都单独保存为一个新的文件,然后对该文件用SHA1加密算法压缩,任何一个文件都可以被该算法压缩成20个字节。也就是说,有2的160次方个文件。压缩后的文件就像原文件的指纹。SHA1 文件名 //不管多大的文件经过该命令后,
复制链接
扫一扫
git-commit-gen:为任何git repo生成伪造的git commits
02-18
“在对新过程实用程序进行某些重构之前,已进行了更新并初步工作” “修复了查询列表的两个集成测试” 用法 命令行: python3 git_commit_gen.py --repo=~/my_project --author=satoshi@gmail.com --n=5 作为一个...
git-常用命令
Valhalla_God的博客
09-06
37
git-常用命令
参与评论
您还未登录,请先
登录
后发表或查看评论
Git:git-rev-parse 命令学习
IT老兵的驿站
08-09
1万+
前言
在研究Jenkins的时候,遇到了git rev-parse这个命令,这里学习一下这个命令。
正文
git-rev-parse - Pick out and massage parameters
这是这个命令的概要解释,理解起来有一点障碍,挑选出来并且“按摩”参数,这个有点意思啊,对参数进行一下按摩。(这里这个massage是不是应该按照调整来理解呢?)
Many Git porcel...
Git - 初步
dongjunhua的专栏
03-01
2527
github 使用:
1 新建项目
2 执行页面上的配置命令
global setup * # 全局配置
# 全局配置,在本机所有项目有效 (若项目有显示配置,则以项目配置为准)
git config --global user.name "my name" # ./gitconfig -->git
Git--->>>1、初步认识 Git
wowo
03-12
174
1、初步认识 Git
Git 是一个 免费、开源的分布式版本控制系统,可以快速处理从小到大的项目。 ,跟分布式对应的还有一个 集中式版本控制系统 。
易于学习
占地面积小
性能快
有廉价的本地库
有方便的暂存区域和多个工作流分支
版本控制
版本控制是能够记录文件内容变化,以便查询特定版本修改情况的系统。
最重要的是它能记录文件修改历史纪录,使得用户能看到版本变化,而且还能做到版本切换。就是把过去记录到的版本切换回去。
两者对比
集中式版本控制工具能做到团队内的每个成员都知道她其成员的工作进度,缺点就是
Git - 常用命令使用教程
zywvvd的博客
11-02
124
本文介绍git常用命令的使用方法。
Git
译为分布式版本控制系统,是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
安装
Linux
$ sudo apt install git-all
$ sudo dnf install git-all
Windows
在 https://git-scm.com/download/win 下载 gitbash 并安装即可
测试
Linux
$ git --version
-> git version .
git rm -r --cache和git ignore
派大星的博客
09-19
3300
git rm
删除暂存区或者git分支上的文件,同时工作区也将删除
此命令用来删除文件,命令组合为
git rm file
git commit file
git push origin master
git rm (-r) --cached
删除暂存区或者分支上的文件,但是工作区中文件还将保留
一般用来取消文件的版本控制,但是依然可以在工作区编辑文件
一般命令组合为
git...
git入门-----初步认识
宇你有缘
04-23
431
由于工作的变换,开始接触git,所以把git进行了初步的学习和整理。此系列的内容基本都是来自网络上各个网友的经验
总结和分享,个人也仅仅用于学习习记录,方便日后查看,如有侵权望告知。
1、版本控制和git。
上一个工作用的是svn,自己也没有系统的学习过,就直接熟悉常用命令开始上手工作,虽然也不耽误什么,但这种学
习工作方式显然是不可取的,一点系统的知识都没
手把手教你入门Git --- Git使用指南(Linux)
weixin_44966641的博客
08-18
180
手把手教你入门Git — Git使用指南(Linux)
系统:ubuntu 18.04 LTS
本文所有git命令操作实验具有连续性,git小白完全可以跟着本文走一遍,就会对git有一个初步的了解了,遇到问题的话欢迎留言或私信博主。
git安装及配置
1 git安装
sudo apt-get install git
可通过git --version 命令查看,正常输出git版本号即安装成功。
2 配置用户名和邮箱名
git config --global user.name "Your Name"
Git初步----简明入门
jiayu_daemon的专栏
12-29
233
1.1
关于版本控制
什么是版本控制?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在本书所展示的例子中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任何类型的文件进行版本控制。
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能)。采用版本控制系
Git-入门
qq_32109935的博客
06-19
135
Git-初步学习第一次提交代码git remote -v 查看git
第一次提交代码
cd 当前文件夹
git init ## 初始化
git add . ## 添加当前文件夹下所有文件
git commit -m “pushcode” ## 提交到缓存区
git remote add git@gitlab.**.git ## 添加远程端仓库
git ...
老王的-Git-之旅
liveJQ
07-18
244
前言
Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
而且,编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。
背景
老王是一个“朴实”、“憨厚”的普通程序员。一天早上...
Git:git-reset的用法总结
IT老兵的驿站
07-31
3066
前言
Git reset感觉是相当复杂的一个指令,用了快一年了,总感觉还没有用明白,所以,需要好好总结一下。
语法
git reset [-q] [&amp;amp;amp;amp;amp;lt;tree-ish&amp;amp;amp;amp;amp;gt;] [--] &amp;amp;amp;amp;amp;lt;paths&amp;amp;amp;amp;amp;gt;…​
git reset (--patch | -p) [
Git的初步使用 -02
学习是修养的提升
08-29
89
Git的具体使用
Mac 安装和配置Git
打开mac控制台在需要存放git的目录下: 配置邮箱和用户名
git config --global user.name ‘myname’
git config --global user.email ‘mygmail@gmail.com’
生成ssh公钥密钥
ssh-keygen
把公钥输出
cat /c/Users/用户/.ssh/id...
Git - 期末总结
牧码的博客
03-31
227
终于到了期末总结的时刻了!
经过几天的学习,相信你对Git已经初步掌握。一开始,可能觉得Git上手比较困难,尤其是已经熟悉SVN的童鞋,没关系,多操练几次,就会越用越顺手。
Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了。
友情附赠国外网友制作的Git Cheat Sheet,建议打印出来备用:
Git Cheat Sheet
...
关于git 凭证存储 credential helper配置 ,解决(git pull,push,fetch)remote not found的问题
热门推荐
DavidFFFFFF的博客
03-27
2万+
昨天不知怎么搞得,项目本地git bash一直连不上远程origin,一直在报错(图1),在网上看了一篇博客,要重新配置git 凭证存储,这里涉及到的知识就是git通过http或https的方式连接远程仓库时用户名和密码的记忆存储问题;
凭证存储
在使用Git进行开发的时候,我们可以使用ssh方式或者http url方式来进行源码的clone/push/pull,如果你使用的是 SSH 方式连接...
版本控制之Git---安装及基本操作
红尘炼炼心的博客
11-04
276
在Windows上安装Git
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,就不建议你折腾了。不过,有高人已经把模拟环境和Git都打包好了,名叫msysgit,只需要下载一个单独的exe安装程序.
Git学习-初步了解
m0_37179470的博客
08-03
91
一、Git的简单认识
Git ~= GitHub ~= GitHub所提供的windows Client
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
GitHub是开源项目的托管平台,只支持git版本控制的格式。
所提供的客户端是对Git相关功能进行封装,方便傻瓜式操作;
git ~git Bash ~ cygwin (在windows提供类UNIX模拟环境,可以提供g...
GIt远程仓库pull拉取代码
最新发布
NanChen的博客
12-20
274
如果提示如下错误: OpenSSL SSL_read: Connection was reset, errno 10054。如果你使用git clone 拉取代码后更改无法提交的问题,可以使用以下解决方案。在本地创建dev分支并且切换到该分支:git checkout -b master。并重新执行第四部(此处没有提示)。到此处就已经将所有的文件pull下来了,接下来就是修改提交文件。,*则将ssl验证设置为false,。这里注意一下,不能直接使用git push。
初识Go语言
tainqiuer123的博客
12-19
425
Go工具安装、专用语、规范
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
yjkwf
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
235
原创
10万+
周排名
55万+
总排名
82万+
访问
等级
8113
积分
236
粉丝
102
获赞
90
评论
286
收藏
私信
关注
热门文章
java中接口的定义与实现
199004
C++ static、const和static const 以及它们的初始化
58501
EditText获取焦点
38620
Eclipse中如何搜索整个工程
29235
Android 源码下编译APK
12380
分类专栏
转载文章
14篇
Android开发相关
26篇
Java开发相关
18篇
Google Android SDK
10篇
Linux相关
12篇
C语言技巧相关
5篇
MFC-[2]文档和文档模板
MFC-[3]视图和框架窗口
2篇
MFC-[4]对话框
MFC-[5]属性单
MFC-[6]工具栏和状态栏
MFC-[7]菜单
MFC-[8]打印和打印预览
最新评论
java中接口的定义与实现
猫和老鼠打老虎:
这就是高手吗,爱了爱了
java中接口的定义与实现
Deep_Mind:
博主水平很高了,在下佩服
java中接口的定义与实现
我叫高小明:
很好多谢学习了
java中的监听者模式
angiwit:
真是通俗易懂,以前没怎么看懂,现在又看了一遍,懂了,谢谢楼主~!
让ubuntu下的eclipse支持GBK编码
弯弯九连环:
楼主赞一个
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Visual Studio 2008 中程序路径配置
获取网卡mac地址
MySQL命令行导入导出数据库
2016年1篇
2015年14篇
2014年16篇
2013年7篇
2012年52篇
2011年25篇
2010年187篇
目录
目录
分类专栏
转载文章
14篇
Android开发相关
26篇
Java开发相关
18篇
Google Android SDK
10篇
Linux相关
12篇
C语言技巧相关
5篇
MFC-[2]文档和文档模板
MFC-[3]视图和框架窗口
2篇
MFC-[4]对话框
MFC-[5]属性单
MFC-[6]工具栏和状态栏
MFC-[7]菜单
MFC-[8]打印和打印预览
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
yjkwf
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值