git教程

git教程
git教程

教程:在CentOS 5上安装Git

Git是Linus.Torvald为了管理Linux内核发起并开发的一个开源分布式版本控件系统,作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识,它不同于我们熟悉的CVS、SVN和同时分布式控制系统的Mercurial。既然现在都流行这个Git分布式版本控制系统,我也在服务器上装一个学一下。

首先安装Git依赖的一些包。

yum install zlib-devel

yum install openssl-devel

yum install perl

yum install cpio

yum install expat-devel

yum install gettext-devel

接下来,如果你已经安装过Curl了,那么跳过这一步,没有的话,就装一下。(可以yum安装)

wget http://curl.haxx.se/download/curl-7.18.0.tar.gz

tar xzvf curl-7.18.0.tar.gz

cd curl-7.18.0

./configure

make

make install

确定一下ld.so.conf文件里有/usr/local/lib,这个是为git-http-push准备的。

vi /etc/ld.so.conf

#插入下面的代码

/usr/local/lib

保存文件,接着运行:

/sbin/ldconfig

最后,我们下载Git并安装它

wget https://www.360docs.net/doc/a62339570.html,/projects/git-snapshots/git/git-latest.tar.gz

tar xzvf git-latest.tar.gz

cd git-{date}(这里的{date}指的是版本的时间)

autoconf(如果终端提示no command的话就yum install autoconf,千万不要以为文件夹中有makefile就好直接make了,不然会出错的)

./configure --with-curl=/usr/local

make

make install

初识版本控制系统Git

Git 是用于Linux 内核开发的版本控制工具。与常用的版本控制工具CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。本文是《Git Community Book》的译者刘辉在InfoQ上发表的一篇专栏文章,整个系列名为《Git历险记》。本文是系列第一篇,对Git的历史、特点和作者的使用心得进行了概述。以下为正文。

作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识,它相对于我们熟悉的CVS、SVN甚至同时分布式控制系统的Mercurial,有哪些优势和不足呢。Git是Linus.Torvald为了管理Linux内核发起并开发的一个开源分布式版本控件系统(DVCS)。从2002年起,Linux 内核一直使用BitKeeper来进行版本管理,但是在2005年BitKeeper和Linux 内核开源社区的合作关系结束,BitKeeper再也不能免费使用了,这迫使Linus决定开发一个开源界自已的版本控制系统。

传统的SVN、CVS 等版本控制系统,只有一个仓库(repository),用户必须要连上这个仓库才能开始提交;而Git之类的分布式版本控制系统(当然也还包括BitKeeper、Mercurial等等),它的每个工作目录都包含一个完整的仓库,它们可以支持离线工作,先把工作提交到本地仓库后再提交上远程的

服务器上的仓库里。分布式的处理也让开发更为便捷,开发人员可以很方便的在本地创建分支来进行日常开发,每个人的本地仓库都是平等且独立,不会因为你的本地提交而直接影响别人。

老实说,Git的速度是我用的版本控制系统中最快的(SVN Mercurial Git)。我这里说的速度,包括本地提交(commit)、本地签出(checkout)、提交到远程仓库(git push)和从远程仓库获取(git fetch ,git pull);它的本地操作速度和本地文件系统在一个级别,远程仓库的操作速度和SFTP文件传输在一个级别。这当然和Git的内部实现机制有关,这里就不多展开了。

我们在学一门新的语言时,往往是从一个“hello world” 程序开始的,那么Git历程也就从一个“hello Git”开始吧。

我们首先打开Git的命令行:windows下是点击“Git Bash 快捷方式”;Linux或是Unix like平台的话就直接打开命令行界面就可以了。

备注:$符号后面的字符串代表的是命令行输入;命令行输入后的以#开始的黑体字符串代表注释;其它的部分则是命令行输出。

我们先用建一个仓库吧:

$mkdir testGit #建立仓库目录

$cd testGit #进入仓库目录

$git init #这会在当前的目录下建一个仓库

Initialized empty Git repository in e:/doc/Git/test/testGit/.git/

好的,前面的三行命令就建立了一个本地的Git仓库。这个仓库现在是一个空的仓库。

我们在命令行下执行:

$ git status #查看当前仓库的状态

# On branch master (在master分支上)

#

# Initial commit

#

nothing to commit (create/copy files and use "git add" to track)

(现在没有任何台被提交的文件,复制或创建新的文件,再用”git add” 命令添加到暂存区中)

$ git log #查看当前仓库的历史日志

fatal: bad default revision 'HEAD'

(由于仓库里没有任提交在里面,所以它会报这个错。BTW: 这种提示是不是有点不友好呀:) ) 现在就让我们在这个仓库里添加点内容吧。

$ echo “hello Git” > readme.txt #建立一个含有 hello Git 的文本文件

$ git add readme.txt #将readme.txt添加到暂存区中

$ git status #查看当前仓库的状态

# On branch master

#

# Initial commit

#

# Changes to be committed:(暂存里下次将被提交的修改)

# (use "git rm --cached ..." to unstage)

#

# new file: readme.txt

#

好的,文件即然被暂存到暂存区中,我们现在就可以把它提交到仓库里面去:) $ git commit -m "project init" #将刚才的修改提交到本地仓库中

[master (root-commit) 8223db3] project init

1 files changed, 1 insertions(+), 0 deletions(-)

create mode 100644 readme.txt

$ git status

# On branch master

nothing to commit (working directory clean)

(现在这个工作目录里没有什么要提交的东东,它是整洁的)

现在你执行一下git log 命令就会看到刚才的提交记录

$ git log

commit 8223db3b064a9826375041c8fea020cb2e3b17d1

Author: liuhui998

Date: Sat Jan 1 18:12:38 2011 +0800

project init

“8223db3b064a9826375041c8fea020cb2e3b17d1”这一串字符就是我们这次创建的提交的名字。看起来是不是很熟,如果经常用电驴的朋友就会发现它就是和电驴里内容标识符一样,都是SHA1串。Git通过对提交内容进行SHA1 Hash运算,得到它们的SHA1串值,作为每个提交的唯一标识。根据一般的密码学原理来说,如果两个提交的内容不相同,那么它们的名字就不会相同;反之,如果它们的名字相同,就意味着它们的内容也相同。

现在我想改一下仓库里文件的内容,现提交到仓库中去

$ echo "Git is Cool" >> readme.txt #在文件的最后添加一行

$ git status #查看当前仓库的状态

# On branch master

# Changed but not updated: (修改了,但是还没有暂存的内容)

# (use "git add ..." to update what will be committed)

# (use "git checkout -- ..." to discard changes in working directory)

#

# modified: readme.txt

#

no changes added to commit (use "git add" and/or "git commit -a")

(没有修改可以被提交,使用“git add” 命令添加文件到暂存区,或是使用“git commit -a” 命令强制提交当前目录下的所有文件)

OK,即然我们修改了仓库里被提交的文件,那么我想看一下我们

到底改了哪些地方,再决定是否提交。

$ git diff #查看仓库里未暂存内容和仓库已提交内容的差异

diff --git a/readme.txt b/readme.txt

index 7b5bbd9..49ec0d6 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1 +1,2 @@

hello Git

+Git is Cool

很好,正如我们所愿,我们只是在readme.txt的最后一行添加了一行“Git is Cool”。

好的,我们现在再把readme.txt放到暂存区里:

$ git add readme.txt

我们现在看一下仓库的状态:

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD ..." to unstage)

#

# modified: readme.txt

#

可以提交了:

$ git commit -m "Git is Cool"

[master 45ff891] Git is Cool

1 files changed, 1 insertions(+), 0 deletions(-)

(一个文件被修改,一行插入,零行删除)

再看一下新的日志:

$ git log

commit 45ff89198f08365bff32364034aed98126009e44

Author: liuhui998

Date: Sat Jan 1 18:17:07 2011 +0800

Git is Cool

commit 8223db3b064a9826375041c8fea020cb2e3b17d1

Author: liuhui998

Date: Sat Jan 1 18:12:38 2011 +0800

project init

“45ff89198f08365bff32364034aed98126009e44” 这个就是我们刚才提交修改时创建的提交。

大家这么一路看过来,是不是有点糊涂了。不过没有关系,如果你的电脑装了Git,那么你把上面的这些命令全部执行一下遍就会对它有感性的认识了。

Git历险记(2):Git的安装和配置

《Git Community Book》的译者刘辉在上一篇Git历险记(1):初识版本控制系统Git讲了一个“hello Git” 的小故事。使广大朋友对Git有了一定了解。但不少朋友对Git还是有很多疑问。本文是Git历险记的第二篇,从这一篇开始,刘辉将从Linux (*nix) 平台和Windows平台介绍起,,更深入讲解Git的下载、安装和配置。以下是正文。

从这一篇开始,我就将比较“啰嗦”的和大家一起从零开始经历Git使用的每一步,当然对我而言这也是一个重新认识Git的过程。

使用Git的第一步肯定是安装Git,因为在多数平台上Git是没有预装的。我平时主要的工作环境是windows和Linux(ubuntu),我想看这篇文章的同学多半也是在这两个平台下工作;下面我讲一下如何在这两个平台下安装和配置Git。

BTW:如果是苹果平台的用户的安装可以参看一下这里(1,2),配置和命令行的使用与windows、Linux(*nix)平台差别不大。

Linux (*nix) 平台

Linus开发Git的最初目的就是为了开发Linux内核服务的,自然它对Linux的平台支持也是最棒的。在Linux下安装Git大约有几种方法:

从源代码开始(这种方法也适合于多数*nix平台)

从Git官网的下载页面下载它最新稳定版的源代码,就可以从源代码开始编译、安装:

$ wget https://www.360docs.net/doc/a62339570.html,/pub/software/scm/git/git-1.7.3.5.tar.bz2

$ tar -xjvf git-1.7.3.5.tar.bz2

$ cd git-1.7.3.5

$ make prefix=/usr all ;# prefix设置你的Git安装目录

$ sudo make prefix=/usr install ;# 以root权限运行

为了编译Git的源代码,我们还需要一些库: expat、curl、zlib 和openssl; 除了expat 外,其它的库可能在你的机器上都安装了。

使用安装包管理器(apt 或yum)

在fedora 等系统下用yum :

$ yum install git-core

在debian, ubuntu等系统下用apt :

$ apt-get install git-core

有时候,你系统里的安装包管理器出现了问题,或是要安装Git的机器不能上网、没有编译器的话,你可以从下面的站点去下载“.deb” 或“.rpm”的安装包:

●RPM Packages

●Stable Debs

Windows平台

windows平台有两个模拟*nix like运行环境的工具:cygwin,msys;Git在cygwin,msys下都有相应的移植版本。我个人觉得msys平台下的msysGit最好用,现在我在windows下也是用的这个版本。

很多同学可能要问,现在windows下有那多Git用户,为什么Git不直接出一个windows native 版。俺当年翻看了一下Git的源代码,它里面使用了大量的*nix平台的native api,而这些api在windows 下是没有的,所以必须要用cygwin、msys这样的一个中间层来满足软件移植的要求。

下面我“啰嗦”一下如何在windows下安装msysGit。

下载

到它的下载页面去下载一个最新的完整安装包,笔者在撰写本文时下载的是这个。

安装

安装的过程没有什么好说的,一般是开始安装后,一路的点击“下一步”。由于windows平台的换行符(CRLF)和Linux(*nix)平台的换行符(LF)不同,那么在windows下开发其它平台软件的朋友有一个地方要注意(见下图):

在这里一最好选“Checkout as-is, commit as-is”这个选项,这样,Git就不会修改你代码的换行符风格。

以前有个朋友因为选错了这个选项,以致他在windows平台下的一签出(checkout)其它平台的代码,就会显示”已修改“(modified),不过后来可能msysGit也认识到这个问题了,就把默认选项改成了这个选项。

BTW: 其实前面两项也是有用的,如果对windows和Linux(*nix)平台如何处理换行符很熟悉的话,也可以尝试一下前面两个选项:)

配置Git

在Linux下和windows下配置Git的方法差不多,只是在Linux下,可以在命令行里直接使用git config进行配置, 而在windows下则要先打开“Git Bash”,进入msysGit命令行界面,再用git config 命令进行相应的配置操作。

好了,前面安装好了Git,现在我们开始配置:

第一个需要配置的就是用户的用户名和email,因为这些内容会出现在你的每一个提交(commit)里面的,像下面这样:

$ git log #我们用git log查看当前仓库的提交(commit)日志

commit 71948005382ff8e02dd8d5e8d2b4834428eece24

Author: author

Date: Thu Jan 20 12:58:05 2011 +0800

Project init

下面的这两行命令就是设置用户名和email:

$ git config --global https://www.360docs.net/doc/a62339570.html, author #将用户名设为author

$ git config --global user.email author@https://www.360docs.net/doc/a62339570.html, #将用户邮箱设为author@https://www.360docs.net/doc/a62339570.html,

Git的配置信息分为全局和项目两种,上面命令中带了“--global"参数,这就意味是在进行全局配置,它会影响本机上的每个一个Git项目。

大家看到,上面我们用的是@corpmail(公司邮箱);但是有时候我们可能也参与了一些开源项目,那么就需要新的用户名和自己的私人邮箱,Git 可以为每个项目设定不同的配置信息。

在命令行环境,进入Git项目所在目录,执行下面的命令:

$ git config https://www.360docs.net/doc/a62339570.html, nickname#将用户名设为nickname

$ git config user.email nickname@https://www.360docs.net/doc/a62339570.html, #将用户邮箱设为nickname@https://www.360docs.net/doc/a62339570.html,

Git的设计哲学和Linux(*nix)一样,尽量的使用“文本化”(Textuality);它里面尽量用文本化的形式存储信息,对于配置信息也更是如此,用户的这些配置信息全部是存储在文本文件中。Git的全局配置文件是存放在"~/.gitconfig"(用户目录下的.gitconfig)文件中:

我们用cat、head命令查看全局配置信息文件,并假设相关配置信息存储在文件的前3行(当然也有可能不在前3行,这里只是为了方便表示)

$ cat ~/.gitconfig | head -3

[user]

name = author

email = author@https://www.360docs.net/doc/a62339570.html,

而项目配置文件是存放在Git项目所在目录的".git/config"文件中,这里也像上面一样用cat、head 命令查看一下:

$ cat .git/config | head -3

[user]

name = nickname

email = nickname@https://www.360docs.net/doc/a62339570.html,

如果大家对于Git熟悉后,可以直修改”~/.gitconfig”,”.git/config”这两个文件进行配置。

Git历险记(3):创建一个自己的本地仓库

如果我们要把一个项目加入到Git的版本管理中,可以在项目所在的目录用git init命令建立一个空的本地仓库,然后再用git add命令把它们都加入到Git本地仓库的暂存区(stage or index)中,最后再用git commit命令提交到本地仓库里。

创建一个新的项目目录,并生成一些简单的文件内容:

$ mkdir test_proj

$ cd test_proj

$ echo “hello,world” > readme.txt

在项目目录创建新的本地仓库,并把项目里的所有文件全部添加、提交到本地仓库中去:

$ git init #在当前的目录下创建一个新的空的本地仓库

Initialized empty Git repository in /home/user/test_proj/.git/

$ git add . #把前目录下的所有文件全部添加到暂存区

$ git commit -m 'project init' #创建提交

[master (root-commit) b36a785] project init

1 files changed, 1 insertions(+), 0 deletions(-)

create mode 100644 readme.txt

Git目录的结构

git init命令在项目的顶层目录中建了一个名为:“.git”的目录,它的别名是“Git目录”(Git directory)。这时”Git目录”中虽然有一些文件,但是没有任何提交(commit)在里面,所以我们叫它是空仓库(empty Git repository)。

和SVN不同,一个Git项目一般只在项目的根目录下建一个“.git”目录,而SVN则会在项目的每一个目录下建一个”.svn”目录;这也我喜欢Git的原因之一:)

Git把所有的历史提交信息全部存储在“Git目录”里,它就是一个Git项目的仓库;你对本地的源代码进行编辑修改后创建的提交也都会先保存在这里面,然后再推送到远端的服务器。当我们我把项目目录和“Git目录”一起拷到其它电脑里,它能马上正常的工作(所有的提交信息全都保存在Git目录里);甚至可以只把“Git目录”拷走也行,但是要再签出(checkout)一次。

Git为了调试的方便,它可以指定项目的Git目录的位置。有两种办法:一是设置“GIT_DIR”环境变量,二是在命令行里设定“--git-dir--git-dir”参数指定它的位置,大家可以看一下这里(git(1) Manual Page)。

庖丁解牛

前面的这些东东我在第一篇里也大概的讲过一些,但是今天我们想不但要开动这辆叫“Git”的跑车,还想看看它里面有些什么样的零件,是怎么构成的。

OK,我们来看看“test_proj”项目里的“Git目录”的结构:

$cd test_proj/.git

$ ls | more

branches/ # 新版的Git已经不再使用这个目录,所以大家看到它 #一般会是空的

COMMIT_EDITMSG # 保存着上一次提交时的注释信息

config # 项目的配置信息

description # 项目的描述信息

HEAD # 项目当前在哪个分支的信息

hooks/ # 默认的“hooks” 脚本文件

index # 索引文件,git add 后把要添加的项暂存到这里

info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #,看一下这里

logs/ # 各个refs的历史信息

objects/ # 这个目录非常重要,里面存储都是Git的数据对象

# 包括:提交(commits), 树对象(trees),二进制对象 #(blobs),标签对象(tags)。

#不明白没有关系,后面会讲的。

refs/ # 标识着你的每个分支指向哪个提交(commit)。

我先用git log命令来看一下这个Git项目里有哪些提交:

$ git log

commit 58b53cfe12a9625865159b6fcf2738b2f6774844

Author: liuhui998

Date: Sat Feb 19 18:10:08 2011 +0800

project init

大家可以看到目前只有一个提交(commit)对象,而它的名字就

是:”58b53cfe12a9625865159b6fcf2738b2f6774844”。这个名字就是对象内容的一个SHA签名串值,只要对象里面的内容不同,那么我们就可以认为对象的名字不会相同,反之也成立。我在使用时一般不用把这个40个字符输全,只要把前面的5~8个字符输完就可以(前提是和其它的对象名不冲突)。为了方便表示,在不影响表达的情况下,我会只写SHA串值的前6个字符。

我们可以用git cat-file来看一下这个提交里的内容是什么:

$ git cat-file -p 58b53c

tree 2bb9f0c9dc5caa1fb10f9e0ccbb3a7003c8a0e13

author liuhui998 1298110208 +0800

committer liuhui998 1298110208 +0800

project init

大家可以看到:提交“58b53c” 是引用一个名为“2bb9f0”的树对象(tree)。一个树对象(tree)可以引用一个或多个二进制对象(blob), 每个二进制对象都对应一个文件。更进一步, 树对象也可以引用其他的树对象,从而构成一个目录层次结构。我们再看一下这个树对象(tree)里面有什么东东:

$ git cat-file -p 2bb9f0

100644 blob 2d832d9044c698081e59c322d5a2a459da546469 readme.txt

不难看出,2bb9f0”这个树对象(tree)包括了了一个二进制对象(blob),对应于我们在前面创建的那个叫”readme.txt”的文件。现在我们来看看这个”blob”里的数据是不是和前面的提交的内容一致:

$ git cat-file -p 2d832d

hello,world

哈哈,熟悉的“hello,world”又回来了。

想不想看看提交对象、树对象和二进制对象是怎么在”Git目录“中存储的;没有问题,执行下面的命令,看看”.git/objects”目录里的内容:

$ find .git/objects

.git/objects

.git/objects/2b

.git/objects/2b/b9f0c9dc5caa1fb10f9e0ccbb3a7003c8a0e13

.git/objects/2d

.git/objects/2d/832d9044c698081e59c322d5a2a459da546469

.git/objects/58

.git/objects/58/b53cfe12a9625865159b6fcf2738b2f6774844

.git/objects/info

.git/objects/pack

如果大家仔细看上面命令执行结果中的粗体字,所有的对象都使用SHA签名串值作为索引存储在”.git/objects”目录之下;SHA串的前两个字符作为目录名,后面的38个字符作为文件名。

这些文件的内容其实是压缩的数据外加一个标注类型和长度的头。类型可以是提交对象(commit)、二进制对象(blob)、树对象(tree)或者标签对象(tag)。

如何clone一个远程项目

我身边的很多朋友是因为要得到某个开源项目的代码,所以才开始学习使用Git。而获取一个项目的代码的一般的做法就是用git clone命令进行直接复制。

例如,有些朋友可能想看一下最新的linux内核源代码,当我们打开它的网站时,发现有如下面的一段提示:

URL

git://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

https://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

URL下面的三行字符串表示三个地址,我们可以通过这三个地址得到同样的一份Linux内核源代码。

也就是说下面这三条命令最终得到的是同一份源代码:

git clone git://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

git clone https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

git cone https://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

我们先来看一下URL,git://、http://、https://这些代表是传输git仓库的协议形式,而

“https://www.360docs.net/doc/a62339570.html,“则代表了Git仓库存储的服务器名字(域名),

“/pub/scm/linux/kernel/git/torvalds/linux-2.6.git” 则代表了Git仓库在服务器上位置。

Git 仓库除了可以通过上面的git、http、https协议传输外还可以通过ssh、ftp(s)、rsync等协议来传输。git clone的本质就是把“Git目录”里面的内容拷贝过来,大家想想看,一般的“Git目录”里有成千上万的各种对象(提交对象,树对象,二进制对象......),如果逐一复制的话,其效率就可想而知。

如果通过git、ssh协议传输,服务器端会在传输前把需要传输的各种对象先打好包再进行传输;而http(s)协议则会反复请求要传输的不同对象。如果仓库里面的提交不多的话,前者和后者的效率相差不多;但是若仓库里有很多提交的话,git、ssh协议进行传输则会更有效率。

不过现在Git对http(s)协议传输Git仓库做了一定的优化,http(s)传输现在也能达到ssh协议的效率,有兴趣的朋友可以看一下这里(Smart HTTP Transport)。

好的,现在我们执行了下面这条命令,把linux-2.6的最新版源代码clone下来:

$cd ~/

$mkdir temp

$git clone git://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git Initialized empty Git repository in /home/liuhui/temp/linux-2.6/.git/

remote: Counting objects: 1889189, done.

remote: Compressing objects: 100% (303141/303141), done.

Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.

remote: Total 1889189 (delta 1570491), reused 1887756 (delta 1569178)

Resolving deltas: 100% (1570491/1570491), done.

Checking out files: 100% (35867/35867), done.

当我们执行了“git clone git://https://www.360docs.net/doc/a62339570.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git”这条命令后大家可以看到这条输出:

Initialized empty Git repository in /home/user/temp/linux-2.6/.git/

这就是意味着我们在本地先建了一个“linux-2.6”目录,然后在这个目录建了一个空的Git本地仓库(Git目录);里面将会存储从网上拉下来的历史提交。

下面两条输入代表服务器现在调用git-pack-objects 对它的仓库进行打包和压缩:

remote: Counting objects: 1888686, done.

remote: Compressing objects: 100% (302932/302932), done.

然后客户端接收服务器端发过送过来的数据:

Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.

在我们执行完上面的clone linux-2.6代码的的操作后,Git会从“Git目录”里把最新的代码到签出(checkout)到“linux-2.6”这个目录里面。我们一般把本地的“linux-2.6”这个目录叫做”工作目录“(work directory),它里面保存着你从其它地方clone(or checkout)过来的代码。当你在项目的不同分支间切换时,“工作目录”中的文件可能会被替换或者删除;“工作目录”只是保存着当前的工作,你可以修改里面文件的内容直到下次提交为止。

大家还记得前面的“庖丁解牛”吗,是不是觉得只杀一头叫“hello,world”的小牛太不过瘾了。没有问题,拿起前面的那把小刀,来剖析一下现在躺在你硬盘里这头叫“linux-2.6”大牛看看,我想一定很好玩。

Git历险记(4):索引与提交的那些事

编者按:本文是《Git历险记》的第四篇,前三篇文章从初识、安装、设置Git谈起,并介绍了git add,git commit这两个命令。但是对这两个命令幕后还有很多有趣的细节,本文将一一介绍。以下是原文。

不一样的索引

我想如果看过《Git历险记》的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了;知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(commit)。但是它们台前幕后的一些有趣的细节大家不一定知晓,请允许我一一道来。

Git 索引是一个在你的工作目录(working tree)和项目仓库间的暂存区域(staging area)。有了它, 你可以把许多内容的修改一起提交(commit)。如果你创建了一个提交(commit),那么提交的一般是暂存区里的内容, 而不是工作目录中的内容。

一个Git项目中文件的状态大概分成下面的两大类,而第二大类又分为三小类:

1、未被跟踪的文件(untracked file)

2、已被跟踪的文件(tracked file)

1、被修改但未被暂存的文件(changed but not updated或modified)

2、已暂存可以被提交的文件(changes to be committed 或staged)

3、自上次提交以来,未修改的文件(clean 或unmodified)

看到上面的这么多的规则,大家早就头大了吧。老办法,我们建一个Git测试项目来试验一下:我们先来建一个空的项目:

$rm -rf stage_proj

$mkdir stage_proj

$cd stage_proj

$git init

Initialized empty Git repository in /home/test/work/test_stage_proj/.git/ 我们还创建一个内容是“hello, world”的文件:

$echo "hello,world" > readme.txt

现在来看一下当前工作目录的状态,大家可以看到“readme.txt”处于未被跟踪的状态(untracked file):

$git status

# On branch master

#

# Initial commit

#

# Untracked files:

# (use "git add ..." to include in what will be committed)

#

# readme.txt

nothing added to commit but untracked files present (use "git add" to track) 把“readme.txt"加到暂存区:$git add readme.txt

现在再看一下当前工作目录的状态:

$git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached ..." to unstage)

#

# new file: readme.txt

#

可以看到现在"readme.txt"的状态变成了已暂存可以被提交(changes to be committed),这意味着我们下一步可以直接执行“git commit“把这个文件提交到本地的仓库里去了。

暂存区(staging area)一般存放在“git目录“下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。索引是一个二进制格式的文件,里面存放了与当前暂存内容相关的信息,包括暂存的文件名、文件内容的SHA1哈希串值和文件访问权限,整个索引文件的内容以暂存的文件名进行排序保存的。

但是我不想马上就把文件提交,我想看一下暂存区(staging area)里的内容,我们执行git ls-files命令看一下:

$git ls-files --stage

100644 2d832d9044c698081e59c322d5a2a459da546469 0 readme.txt

我们如果有看过上一篇文章里的"庖丁解牛", 你会发现“git目录“里多出

了”.git/objects/2d/832d9044c698081e59c322d5a2a459da546469”这么一个文件,再执行“git cat-file -p

2d832d” 的话,就可以看到里面的内容正是“hello,world"。Git在把一个文件添加暂存区时,不但把它在索引文件(.git/index)里挂了号,而且把它的内容先保存到了“git目录“里面去了。

如果我们执行”git add“命令时不小心把不需要的文件也加入到暂存区中话,可以执行“git rm

--cached filename" 来把误添加的文件从暂存区中移除。

现在我们先在"readme.txt"文件上做一些修改后:

$echo "hello,world2" >> readme.txt

再来看一下暂存区的变化:

$git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached ..." to unstage)

#

# new file: readme.txt

#

# Changed but not updated:

# (use "git add ..." to update what will be committed)

# (use "git checkout -- ..." to discard changes in working directory)

#

# modified: readme.txt

#

大家可以看到命令输出里多了一块内容:“changed but not updated ...... modified: readme.txt”。大家可能会觉得很奇怪,我前面不是把"readme.txt"这个文件给添加到暂存区里去了吗,这里怎么又提示我未添加到暂存区(changed but not updated)呢,是不是Git搞错了呀。

Git 没有错,每次执行“git add”添加文件到暂存区时,它都会把文件内容进行SHA1哈希运算,在索引文件中新加一项,再把文件内容存放到本地的“git目录“里。如果在上次执行“git add”之后再对文件的内容进行了修改,那么在执行“git status”命令时,Git会对文件内容进行SHA1哈希运算就会发现文件又被修改了,这时“readme.txt“就同时呈现了两个状态:被修改但未被暂存的文件(changed but not updated),已暂存可以被提交的文件(changes to be committed)。如果我们这时提交的话,就是只会提交第一次“git add"所以暂存的文件内容。

我现在对于“hello,world2"的这个修改不是很满意,想要撤消这个修改,可以执行git checkout这个命令:

$git checkout -- readme.txt

现在再来看一下仓库里工作目录的状态:

$git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached ..." to unstage)

#

# new file: readme.txt

#

好的,现在项目恢复到我想要的状态了,下面我就用git commit 命令把这个修改提交了吧:

$git commit -m "project init"

[master (root-commit) 6cdae57] project init 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 readme.txt

现在我们再来看一下工作目录的状态:

$git status

# On branch master

nothing to commit (working directory clean)

大家可以看到“nothing to commit (working directory clean)”;如果一个工作树(working tree)中所有

的修改都已提交到了当前分支里(current head),那么就说它是干净的(clean),反之它就是脏的(dirty)。

SHA1值内容寻址

正如Git is the next Unix 一文中所说的一样,Git是一种全新的使用数据的方式(Git is a totally new way to operate on data)。Git把它所管理的所有对象(blob,tree,commit,tag……),全部根据它们的内容生成SHA1哈希串值作为对象名;根据目前的数学知识,如果两块数据的SHA1哈希串值相等,那么我们就可以认为这两块数据是相同的。这样会带来的几个好处:

Git只要比较对象名,就可以很快的判断两个对象的内容是否相同。

Git使用教程

Git使用教程 原文出处:涂根华的博客 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是 一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。 三:在windows上如何安装Git? msysgit是 windows版的Git,如下: 需要从网上下载一个,然后进行默认安装即可。安装完成后,在开始菜单里面找 到“Git –> Git Bash”,如下: 会弹出一个类似的命令窗口的东西,就说明Git安装成功。如下:

安装完成后,还需要最后一步设置,在命令行输入如下: 因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。 注意:git config –global 参数,有了这个参数,表示你这台机器上所有的Git 仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。四:如何操作? 一:创建版本库。

Git+使用教程

Git 中文教程 介绍 Git --- The stupid content tracker, 傻瓜内容跟踪器。Linus 是这样给我们介绍 Git 的。 Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。 实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发,例如:wine, U-boot 等,详情看https://www.360docs.net/doc/a62339570.html,/git 作为开源自由原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制。它只适用于 Linux / Unix 平台,没有 Windows 版本,目前也没有这样的开发计划。 本文将以 Git 官方文档Tutorial,core-tutorial和Everyday GIT作为蓝本翻译整理,但是暂时去掉了对 Git 内部工作机制的阐述,力求简明扼要,并加入了作者使用 Git 的过程中的一些心得体会,注意事项,以及更多的例子。建议你最好通过你所使用的 Unix / Linux 发行版的安装包来安装 Git, 你可以在线浏览本文,也可以通过下面的命令来得到本文最新的版本库,并且通过后面的学习用 Git 作为工具参加到本文的创作中来。 $ git-clone https://www.360docs.net/doc/a62339570.html,/git/gittutorcn.git 创建一个版本库:git-init-db 创建一个 Git 版本库是很容易的,只要用命令git-init-db就可以了。现在我们来为本文的写作创建一个版本库: $ mkdir gittutorcn $ cd gittutorcn $ git-init-db git 将会作出以下的回应 defaulting to local storage area 这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。你可以用 ls -a 查看一下,并请注意其中的三项内容: ● 一个叫 HEAD 的文件,我们现在来查看一下它的内容:

github使用教程

1、什么是GIT Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM, source code management)。Git最初是由Linus Torvalds为内核开发而设计的管理软件。自从Git推出以来,已经被很多开源项目所采纳。每一个Git工作目录是一个带有完全历史记录和版本信息的仓库,不依赖于网络和中央服务器。Git是一个免费的开源软件,遵从GNU v2协议。 Git这个词在英语中的原意是很笨拙,没用的人。Linus自嘲说:“我是一个任性的笨蛋,所以我把我的所有的项目的名字都和我很相似。第一个是Linux,现在是Git。”Git的帮助文档中描述Git为:笨拙的内容跟踪者(the stupid content tracker)。(翻译自WIKI) 关于开发Git的一些历史由来,可以看看这个网站:https://https://www.360docs.net/doc/a62339570.html,/lkml/2005/4/6/121 2、为什么要用GIT ?更顺畅的工作流程,开发过程中,完全可以离线操作 ?快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换 ?弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令 ?仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净 ?内容按元数据方式存储,所有的版本信息都位于.git目录下 ?完整性好,更易于协作开发 ?用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库 3、GIT安装与配置 a) 安装 1.从源码安装 在安装之前,你必须保证以下几个依赖包已经安装在你的系统上: curl, zlib, openssl, expat, libiconv。如果你的系统是Ubuntu,你可以这样安装: apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 当所有的依赖项已经解决,就可以从https://www.360docs.net/doc/a62339570.html,/download上下载Git的源码,然后编译安装,具体命令如下: tar -zxf git-1.*.*.*.tar.gz cd git-1.*.* make prefix=/usr/local all sudo make prefix=/usr/local install

git简单入门教程

安装完成后,在命令行输入: $ git config --global https://www.360docs.net/doc/a62339570.html, "Your Name" $ git config --global user.email "email@https://www.360docs.net/doc/a62339570.html," 选择一个合适的地方,创建一个空目录: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit 通过git init命令把这个目录变成Git可以管理的仓库: $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ 编写一个readme.txt文件,一定要放到learngit目录下(子目录也行), 因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。内容如下: Git is a version control system. Git is free software. 修改的过程 第一步,用命令git add告诉Git,把文件添加到仓库://可以一次添加多个文件,然后分一次提交就行了 $ git add readme.txt 第二步,用命令git commit告诉Git,把文件提交到仓库: $ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt git status 命令可以让我们时刻掌握仓库当前的状态 git diff 能看看具体修改了什么内容 git log命令显示从最近到最远的提交日志 如果嫌输出信息太多,看得眼花缭乱的, 可以试试加上--pretty=oneline $ git log --pretty=oneline

Git版本控制的安装使用指南

1. 概述 Git是基于Linux内核开发的分布式版本控制/软件配置管理软件,与CVS、Subversion 等集中式版本控制软件不同,Git采用分布式管理,不需要服务器端软件即可运行。Git速度很快,并且具有很出色的合并追踪能力。很多有名的软件开发都使用Git来进行版本控制,其中有Linux内核、https://www.360docs.net/doc/a62339570.html,服务器和OLPC内核开发等。 作为开源软件的代表,Git不对版本库的浏览和修改作任何的权限限制,因此只能采用其他工具实现权限管理,如gitosis、gitolite、CodeBeamer MR。 原本Git的使用只限于Linux/Unix,由于Cygwin、msysgit、TortoiseGit等GUI工具的出现,在Windows平台的使用逐渐成熟。 2. Git安装 2.1 安装Git 安装Git作为客户端,运行客户端可通过Git Bash(Git的命令行)或Git GUI操作。Windows下使用Git-1.7.8-preview20111206.exe,安装要点如下:

上述图片所示选项,似乎也不确定,网上帖子安装教程各种选项都有。安装完后,点击桌面Git Bash启动,执行命令pwd查看默认进入的文件目录,执行下面命令:mkdir .ssh (注意文件名前有.),即在默认目录下建立.ssh文件夹。修改环境变量,桌面右击我的电脑, 在属性中选择高级选项,左击环境变量,在系统变量中选择新建或编辑

下面列出一些问题的解决方法: a. Git Bash中ls不能显示中文目录(可直接打开编辑):在 git/etc/git-completion.bash中增加一行: alias ls='ls --show-control-chars --color=auto',注意引号为中文单引号,重启Git Bash b. Git commit不能提交中文注释:修改git/etc/inputrc中对应的行: set output-meta on set convert-meta off c. git log无法显示中文注释,在git/etc/profile中增加一行: export LESSCHARSET=iso8859 安装完后,需要在Git Bash中注册本人信息: git config --global https://www.360docs.net/doc/a62339570.html, Your Name git config --global user.email your@email.address 在服务端,即Ubuntu,安装Git: sudo apt-get install git-core git-doc 3. Gitolite安装

GIT使用入门详细教程

GIT使用入门 Part 1 第一章基本原理 git是一个版本控制系统。官方的解释是:版本控制(Revision control)是一种软 件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。按我的白话文解释就是:一群志同道合的人身处祖国各地,希望来合作开发一个 项目,假设这个项目是使用c语言写的(当然用任何语言都可以的)。那么大家怎么合作呢?用信件?效率太低。用邮件,不好实现多人沟通。用google group吧,可开发阶段中的源代码没法科学管理。用自建的网站吧,需要人力物 力财力来支撑阿。 这个时候版本控制系统就派上用场了。它可以让一个团队里的不同的人在不同地点、不同时间开发和改进同一个项目,并且在大部分的时间里,版本控制系统会聪明的帮你把不同的人在不同地点不同时间修改的代码融合到项目中去。(当然在一些特殊的情况,还是需要人去决定到底哪些代码需要加入到项目中,这个在后面讨论不迟,先让大家对版本控制有一个好印象,呵呵) 知道了版本控制系统的优点之后,下面就要具体实践和体验了。建议你选用的版本控制系统包括: rcs,cvs,svn,git,Mercurial,Bazzar等等。 当然git,Mercurial和Bazzar都是属于分布式版本控制系统。 下面是一些网友对于这些版本控制系统评论的只言片语: 1)svk配合svn可以实现分布式的版本控制。 2) 我是从SVN转到Git下的。我想Git的优势是速度飞快,谁用谁知道! 3) git的确是最快的,bzr慢的要死 4) SVN 在windows 下有TortoiseSVN 5) git 有Windows 版本,在google code 上的项目。https://www.360docs.net/doc/a62339570.html,/p/msysgit/ 6) 大家可以试试国内提供的git服务。https://www.360docs.net/doc/a62339570.html, 那么,简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了Git 的思想和基本的工作原理,用起来就会知其所以然,游刃

TortoiseGit使用教程详解

TortoiseGit入门教程--参考资料:TortoiseGit帮助文档

目录 1、关于版本控制 (3) 2、TortoiseGit安装: (3) 2、TortoiseGit文件夹图标说明: (9) 3、克隆远程库 (10) 4、对文件进行修改 (13) 5、提交更改。 (14) 6、push推送变更到库 (18) 7、从远程库更新 (19) 8、与远程库同步 (20) 9、解决冲突 (24) 10、TortoiseGitMegar (28) 11、查看本地文件与基础文件的差异 (31) 12、查看别人的修改 (37) 13、查看文件的所有修改者 (40) 14、导出某一版本的文件 (41) 15、慎用Clean Up (44) 16、.gitignore和不需提交的文件 (45) 17、附:删除windows凭据 (46)

1、关于版本控制 版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许是同时工作在同一个文件!- 你就会明白为什么一个好的系统需要管理潜在的混乱。这是来自TortoiseSVN文档的一段话,总结得很精辟。 TortoiseGit 是一个 Windows 下的版本控制系统Git的客户端工具,正如其名字一样,小乌龟外面有一个壳,TortoiseGit也只是Git一个壳,使您更加方便的使用Git。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。版本库就像一个常见的文件服务器,除了它保存你对文件和目录所有的改变。这一特性使得你可以恢复文件的旧版本并查看历史-谁在什么时间如何进行的修改。因此也可以说版本控制系统是一种“时间机器”。 TortoiseGit现在有多语言包可以下载,本文档使用英文版进行说明。 本文档是以个人经验参考官方文档整理出来的,可能会存在很多问题,如有理解不正确的地方希望能够指出,大家共同学习吧。2、TortoiseGit安装: 首先安装git for windows,下载地址:https://git-for-windows.github.io/

GitLab在windows用户端的安装使用详细教程_8877179

代码管理工具GitLab 可视化界面在 windows 安装教程 --作者:Able 1.Windows下TortoiseGit over Putty or Openssh提交项目到GitLab(可视化工具):(安装教程按照1进行) 具体安装教程: Windows下TortoiseGit over Putty or Openssh提交项目到GitLab Gitlab默认的配置推荐使用shell命令行与server端进行交互,作为搞SCM的表示无压力,但是作为开发人员还是比较适应windows的GUI图形管理,方便他们将注意力集中到代码编写上,所以今天刚好接着昨天给大家介绍一下使用windows下的git client工具实现将本地代码提交到远程服务器. 解决方案: 环境部署 操作系统Windows7 x64 Sp1 TortoiseGit TortoiseGit-1.8.11.0-64bit.msi Git Git-1.9.4-preview20140815.exe Putty PuTTY 0.63 OpenSSH owned by Git 下载地址: https://www.360docs.net/doc/a62339570.html,/QaaLGsd23BsWL(访问密码96d7) 注: 此处下载地址中的安装包都为64位版本,32位请另行下载. 一.部署前的准备工作 安装TortoiseGit,Git,Putty,默认下一步安装即可,其中Git为Git client环境安装包,确保w indows包含git环境. 二.配置PuTTY authentication agent 在安装TortoiseGit后,可以选择使用OpenSSH客户端还是使用Putty客户端,如果使用的是默认的Putty客户端,由于TortoiseGit GUI连接不支持server端自定义端口配置,若GitLab 使用的SSH端口为自定义端口,则需要使用PuTTY的authentication agent去做一个本地的端口转发. 1.首先使用TortoiseGit自带的Puttygen创建本地的公/私钥对

TortoiseGit使用入门教程

TortoiseGit入门教程 --参考资料:TortoiseGit帮助文档 边城浪子 二O一七年元月二十日 目录 1、关于版本控制 .................................................... 错误!未定义书签。 2、TortoiseGit安装:.......................................... 错误!未定义书签。 2、TortoiseGit文件夹图标说明: ...................... 错误!未定义书签。 3、克隆远程库 ........................................................ 错误!未定义书签。 4、对文件进行修改 ................................................ 错误!未定义书签。 5、提交更改。 ........................................................ 错误!未定义书签。 6、push推送变更到库............................................ 错误!未定义书签。 7、从远程库更新 .................................................... 错误!未定义书签。 8、与远程库同步 .................................................... 错误!未定义书签。 9、解决冲突 ............................................................ 错误!未定义书签。 10、TortoiseGitMegar........................................... 错误!未定义书签。 11、查看本地文件与基础文件的差异 ................... 错误!未定义书签。 12、查看别人的修改............................................... 错误!未定义书签。 13、查看文件的所有修改者................................... 错误!未定义书签。 14、导出某一版本的文件....................................... 错误!未定义书签。 15、慎用Clean Up ................................................. 错误!未定义书签。

Git菜鸟学习教程

Git菜鸟教程 作为一个Git的新手。写这份教程也是我自己学习和摸索git的过程,其中基于Git进行合作开发的模式参考了CVS,应该是很初级的合作模式。但是当前自己也只能做到这一步了。教程所述都是自己通过试验验证的。至少可以满足公司基本的合作开发。教程写完后,谢欣说可以放到blog与大家共享。我觉得是个不错的主意。一方面我觉得这个文档应该可以给git 的新手一些帮助,另一方面也欢迎git的大牛指点。这里要感谢《Git中文教程》的作者。还有概述中关于git的优点描述拷贝了网络上某位大牛的原话,但是拷贝的出处也是转载的,就在这里谢谢那位我不知名大牛了。 下面就开始了。 1.概述 对于软件版本管理工具,酷讯决定摒弃CVS而转向Git了。 为什么要选择Git?你真正学会使用Git时,你就会觉得这个问题的回答是非常自然的。然而当真正需要用文字来回答时,却觉得文字好像不是那么够用。咳,该则么回答呢? 其实,关键的问题不在于如何回答这个问题。问题的关键是公司已经决定使用它了。那么,我们的程序员们!请开动你们的浏览器,请拿出你的搜索引擎工具,去自己发掘答案吧。在这里,我只能给你们一个最朦胧的感觉。 Git和CVS、SVN不同,是一个分布式的源代码管理工具。Linux内核的代码就是用Git 管理的。它很强,也很快。它给我们带来的直接好处有: 1.傻瓜都会的初始化,git init,git commit-a,就完了。对于随便写两行代码就要放到代码管理工具里的人来说,再合适不过。也可以拿git做备份系统,或者同步两台机器的文档,都很方便。 2.绝大部分操作在本地完成,不用和集中的代码管理服务器交互,终于可以随时随地大胆地check in代码了。只有最终完成的版本才需要向一个中心的集中的代码管理服务器提交。 3.每次提交都会对所有代码创建一个唯一的commit id。不像CVS那样都是对单个文件分别进行版本的更改。所以你可以一次性将某次提交前的所有代码check出来,而不用考虑到底提交过那些文件。(其实SVN也可以做到这点) 4.branch管理容易多了,无论是建立新的branch,还是在branch之间切换都一条命令完成,不需要建立多余的目录。 5.branch之间merge时,不仅代码会merge在一起,check in历史也会保留,这点非常重要。 6.…太多了 当然,Git也会带给我们一些困难,首先,你想要使用好git,就要真正明白它的原理,理解它的观念,对以那些CVS的熟手来说,改变你已经固有的纯集中式源代码管理的观念尤为重要,同时也会让你觉得有些困难。在使用git的初期,你可能会觉得有些困难,但等你逐渐明白它时,你绝对会喜欢上它。这是一定的,就像我问你“喜欢一个温吞如水、毫无感觉的主妇,还是喜欢一个奔放如火,让你爱的痴狂恨的牙痒的情人”一样毋庸置疑。 下面,就让我们进入学习Git之旅… 请记住,这只是一个非常简单而且初级的教程,想要成为git的专家,需要各位同事不断的自己深入挖掘。 2.Git基础命令 2.1创建Git库—git-init

git安装和配置图文教程

Git的安装和配置步骤 1.运行GitExtensions241SetupComplete.msi,在出现的对话框中点击run 2.进入欢迎页面单击next 3.进入Installation Scope界面选择Install for all users of this machine单击next

4.进入Required Software界面,勾选Install MsysGit和Install KDiff,单击next 5.进入选择安装目录界面,按默认路径,单击next 6.进入Custom Setup界面,按默认设置,单击next

7.进入Select SSH Clinet界面,选择OpenSSH,单击next 8.开始安装,单击Install 9.KDiff3安装,进入许可证协议界面,单击‘我接受’

10.进入选择组件页面,按默认设置,单击下一步 11.选择安装路径,按默认设置,单击下一步 12.勾选Install for all users,单击下一步

13.是否创建开始菜单中的快捷方式,勾选不要创建快捷方式,单击安装 14.完成安装向导,单击完成 15.进入Git Setup Wizard界面,单击next

16.进入Select Components界面,按默认设置,单击next 17.进入Adjusting your PATH environment选择Use Git Bash Only,单击next 18.进入Configuring the line ending conversions,按默认设置,单击next

Git-简单使用教程(个人独享版)

Windows下Git和Gitlab简单教程 ---jack杨俊伟在使用之前,因为大家之前用的都是SVN集中式的版本控制系统,而git是分布式的,但在使用和功能上差异没有特别大,这里需要先简单了解它们的差异。 1)最核心的区别Git是分布式的,而Svn不是分布的。Git跟Svn一样有自己的集中 式版本库和Server端,但Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项目分支等操作,等网络再次连接上Push到Server端。 2)Git把内容按元数据方式存储,而SVN是按文件:因为,.git目录是处于你的机器上 的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。 3)Git没有一个全局版本号,而SVN有。Git的内容的完整性要优于SVN: GIT的内 容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。 4)SVN必须先Update才能Commit,忘记了合并时就会出现一些错误,git还是比较 少的出现这种情况。 5)克隆一份全新的目录以同样拥有五个分支来说,SVN是同时复製5个版本的文件, 也就是说重复五次同样的动作。而Git只是获取文件的每个版本的元素 6)提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。 当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属於本地版本库的活动。而你只需“推”

git详细教程

Contents 一、自述 (2) 二、白话概念 (3) 三、我使用的命令 (4) 四、Git的基本使用1—直接在主分支上操作,无需merge,无其他人修改主分支 (5) 五、Git基本使用2—重复上面的步骤 (8) 六、Git 的基本使用3:---新建工作分支,做改动,然后merge,模拟有人修改master,无冲突 10 七、Git的基本使用4:工作分支改动,然后merge,模拟改master,有冲突(同一文件同一行) (15) 八、Git 的基本使用5:工作分支改动,然后merge,模拟改master,有冲突(同一文件不同行) (18) 九、Git 的基本使用6:---谁动了我的master? (19) 十、现在你能分析整个过程吗? (22) Doc name: 《git:菜鸟教菜鸟》 Author: Armand Wang Date: July 30, 2013 E-mail: ww_zidongkong@https://www.360docs.net/doc/a62339570.html, Any advice rendered would be greatly appreciated. Thank you!

版本控制的最大好处就是让你永远可以后悔 ----某大牛 一、自述 Git工具结束了‘小作坊’式的生产,我们不在使用copy来保存各个版本,特别是大工程协作开发时,这种方式也是不可行的。每一次commit产生的snapshot都可以迅速保存当前的版本状态,它使用了如此精妙的算法和数据结构可以像‘照照片’一样快速的记录细微或庞大的改动,你可以通过git log 展示的tag,回到任何一个你想回到版本。大家都在对master分支上的code进行修改,贡献自己的力量,人与人的想法不同,当修改了同一个地方的时候,就会有冲突。这样就需要你merge,你对?他对?或者都保留?这取决于你。恢复版本、分布控制(包括冲突解决)、分支方案,是我认为git的三大特色。 Git是个工具,我们不必要知道它的实现,也不必要了解太多概念,经过运用后形成的感性认识是最重要的,所以我决定写一些自己的直观感受和一己之见,绝非技术博客,倒可以是新手的入门文章,我不保证措辞标准,但是看下去,会用没问题。 我也是刚学git,只会一些简单的命令,但目前已经满足了我的工作需要,学习状态大致经历了三个阶段: 1,开始的时候完全不明白,只知道source code在远端,可以通过git clone down下来,可以通过git reset –hard 恢复最初的状态。 2,知道了git status/add/commit/push/pull等基本操作,可以糊里糊涂的push和pull。但是对于仓库,分支的概念很不清晰,也不会解决冲突。这一阶段多亏了实验室一个同学的帮助和github的教程。 3,相当于柳暗花明的阶段,是读了一篇博文,知道了add在干嘛,commit又是干嘛,最重要学习了一条指令,gitk –all,这是git 的GUI,上面的code line让我彻底明白了分支和commit的概念,当我使用git checkout 切换分支,发现仓库的内容竟然悄无声息的发生了改变。我瞬间明白了到底怎么回事。每个分支都有自己的成长记录(git log),我可以通过git checkout +ID回到该分支的任何历史状态,此时你打开本地的仓库文件夹,它呈现的就是你所切换到的分支,你所要求的状态。在GUI上一切都用code line的方式体现出来,我的我的小伙伴们简直都惊呆了。 首先,推荐一个代码的公共托管平台github,这是世界知名的以git为基础的编程服务中心,是很多程序员的最爱,你可以注册账号,就可以在上面建立server端的仓库,然后clone到本地,管理自己的代码。网址是:https://https://www.360docs.net/doc/a62339570.html,/既然是公共平台,我也没有放置重要的代码在上面,所以我的账号可以给你们用。账户名称:armand-wang 密码是 weide_332020865.我已经新建了一个仓库,名字叫learngit,你们可以使用 git clone git@https://www.360docs.net/doc/a62339570.html,:armand-wang/learngit.git 把仓库clone到本地。

git教程

教程:在CentOS 5上安装Git Git是Linus.Torvald为了管理Linux内核发起并开发的一个开源分布式版本控件系统,作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识,它不同于我们熟悉的CVS、SVN和同时分布式控制系统的Mercurial。既然现在都流行这个Git分布式版本控制系统,我也在服务器上装一个学一下。 首先安装Git依赖的一些包。 yum install zlib-devel yum install openssl-devel yum install perl yum install cpio yum install expat-devel yum install gettext-devel 接下来,如果你已经安装过Curl了,那么跳过这一步,没有的话,就装一下。(可以yum安装) wget http://curl.haxx.se/download/curl-7.18.0.tar.gz tar xzvf curl-7.18.0.tar.gz cd curl-7.18.0 ./configure make make install

确定一下ld.so.conf文件里有/usr/local/lib,这个是为git-http-push准备的。 vi /etc/ld.so.conf #插入下面的代码 /usr/local/lib 保存文件,接着运行: /sbin/ldconfig 最后,我们下载Git并安装它 wget https://www.360docs.net/doc/a62339570.html,/projects/git-snapshots/git/git-latest.tar.gz tar xzvf git-latest.tar.gz cd git-{date}(这里的{date}指的是版本的时间) autoconf(如果终端提示no command的话就yum install autoconf,千万不要以为文件夹中有makefile就好直接make了,不然会出错的) ./configure --with-curl=/usr/local make make install 初识版本控制系统Git Git 是用于Linux 内核开发的版本控制工具。与常用的版本控制工具CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。本文是《Git Community Book》的译者刘辉在InfoQ上发表的一篇专栏文章,整个系列名为《Git历险记》。本文是系列第一篇,对Git的历史、特点和作者的使用心得进行了概述。以下为正文。 作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识,它相对于我们熟悉的CVS、SVN甚至同时分布式控制系统的Mercurial,有哪些优势和不足呢。Git是Linus.Torvald为了管理Linux内核发起并开发的一个开源分布式版本控件系统(DVCS)。从2002年起,Linux 内核一直使用BitKeeper来进行版本管理,但是在2005年BitKeeper和Linux 内核开源社区的合作关系结束,BitKeeper再也不能免费使用了,这迫使Linus决定开发一个开源界自已的版本控制系统。 传统的SVN、CVS 等版本控制系统,只有一个仓库(repository),用户必须要连上这个仓库才能开始提交;而Git之类的分布式版本控制系统(当然也还包括BitKeeper、Mercurial等等),它的每个工作目录都包含一个完整的仓库,它们可以支持离线工作,先把工作提交到本地仓库后再提交上远程的

Gitblit服务器搭建和git使用教程

Gitblit服务器搭建和git使用教程 1.大纲 目前做代码管理的主流是Git,GIthub付费才能不被开源,所以在小范围内或者小型开发团队可以使用Gitblit搭建自己的私人服务器。以下是教程: 需要的安装工具如下 2.安装JDK,配置JAVA环境 默认安装即可。 安装成功后找到安装路径,配置环境变量

右击计算机-->属性-->高级系统配置,点开后 环境变量下面的系统变量

新建 确定保存后CMD一下,输入JAVAC回车,如下图所示则环境配置成功

3.Gitblit服务器搭建 去官网https://www.360docs.net/doc/a62339570.html,/下载最新的压缩包,并在Windows 上搭建 1)下载 2)解压到合适的目录下,如: 3)创建一个目录来存放代码库: E:/GitRepository 4)修改data目录下的gitblit.properties E:\Gitblit\gitblit-1.7.1\data \gitblit.properties 添加红色部分 # # GITBLIT.PROPERTIES # # Define your custom settings in this file and/or include settings defined in # other properties files. # # Include Gitblit's 'defaults.properties' within your configuration. # # NOTE: Gitblit will not automatically reload "included" properties. Gitblit # only watches the 'gitblit.properties' file for modifications. # # Paths may be relative to the ${baseFolder} or they may be absolute. # # COMMA-DELIMITED # SINCE 1.7.0 include = defaults.properties #

Git Gui教程

前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并没有找到满意的教程,新的一年自己梳理一下自己的经验。 可能男生们大神比较多,觉得Git是如此简单,便已觉得命令行操作就是SO EASY,甚至或许有看不起可视化这样面对低端用户的心理,好的,那您就当我是水货可以右上角了。我一直觉得类似GIT这样的东西,他对于我而言只是个不完全必须的工具,我并不想成为使用他的专家,类似的东西,今天有GIT,明天可能有GAT,或者GAY?所以快速地掌握它我需要的重要日常操作,最好是10分钟,那就好了,如果你有类似的想法,好吧,那不要废话了,咱们赶紧开始。 (全文限windows系统。) 何为GIT? 安装GIT,大致了解下GIT是做某子的。 权限校验 首先,您的数据保存在远端服务器一份,服务器需要对您的身份识别。一段RSA加密字符串。启动GUI,菜单-帮助,【Step1-创建密钥】Generate SSH KEY

【Step2-添加密钥】去你的代码托管服务器,你的账号设置中,添加它。 比如在Github中的地址,title随意,比如你可以用Home,company等作为标识来区别。

Gitlab中的演示

账号保存 如果不做设置的话,每次提交的时候,都会询问你填写密码。于是我们先来把这个设置好。【Step3.1-添加环境变量】 我的电脑- 属性- 高级系统设置- 环境变量- 新建变量 变量名HOME,变量值%USERPROFILE%

git的使用教程

GitLab基础使用教程 目录 1、GitLab开发版本管理服务器 (2) 2、添加本地域名解析 (2) 3、修改密码并重新登录 (3) 4、Git Bash下使用Gitlab (3) 5、MyEclipse中使用Gitlab (9) 6、两个重要的文件 (28)

1、GitLab开发版本管理服务器 GitLab,是一个利用 Ruby on Ra ils 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。 我们的GitLab开发版本管理服务器:http://opc/,通过Web浏览器访问我们的GitLab界面 2、添加本地域名解析 到系统目录C:\Windows\System32\drivers\etc下,拷贝出hosts文件,编辑hosts文件,添加“192.168.222.89 opc”行(,回车确保这一行IP映射生效,另存为时注意:1)无后缀名;2)保存编码为ASCII编码格式。 此时,在浏览器中直接输入http://opc/”即可进入我们的GitLab

3、修改密码并重新登录 管理员帮你注册后,你的注册邮箱会收到一封来自GitLab的邮件,邮件中包含登陆地址、首次登陆用的密码(系统随机生成的) 必须使用初始密码登陆后修改登陆密码,然后用新密码登陆即可。 4、Git Bash下使用Gitlab 1、在Windows下安装Git客户端软件 在你的Windows机器上,为了能够方便的检入检出项目,需要安装Git客户端软件,安装完之后会生成 2、生成SSH密钥验证身份 如果你想进行代码的上传与下载等操作,需要你把自己的ssh key导入到gitlab里,方法如下:(Linux下生成方式相同,在自己的home目录下输入该命令即可)打开上步安装生成的Git Bash,输入ssh-keygen -t rsa -C "YOUR EMAIL ADDRESS”,YOUR EMAIL ADDRESS是你的邮箱地址,一直回车即可,此命令在C:\Users\<你的用户名>\.ssh目录下生成一对公私密钥,拷贝公钥(.pub结尾的文件)的

StGit教程_CN

原文:StGit tutorial 翻译:tekkamanninja@https://www.360docs.net/doc/a62339570.html, 翻译完成时间:2011年12月25日星期日 V1.0

目录 获取帮助 (3) 开始使用 (3) 创建一个补丁 (3) 创建另一个补丁 (4) 更新提交信息 (5) 冲突 (5) 工作流程:开发分支 (7) 工作流程:跟踪分支 (8) 向上游提交补丁 (8) 衍合补丁序列 (9) 当你的补丁被采纳 (9) 导入补丁 (10) 导入一个纯补丁 (10) 一次导入多个补丁 (10) 从一封电子邮件中导入补丁 (10) 导入满载补丁的mailbox文件 (10) 其他需要提及的事项 (11) 撤销操作 (11) 同Git交互 (11) 补丁相关 (11) 模板 (12)

StGit是一个命令行应用程序,提供类似Quilt的功能(比如从一个补丁栈中入栈/出栈补丁),但使用Git代替diff和patch 工具。StGit将他的补丁作为普通的Git提交保存在Git仓库中,并提供一系列命令以各种方式操纵他们。 这个教程假设你已经熟悉Git的基本知识(如分支、提交和冲突)。关于Git的详细信息,请参考git(1)或the Git home page。 获取帮助 获取完整的StGit命令列表: $ stg help 获取单个StGit子命令的快速帮助: $ stg help 获取一个StGit子命令的详细帮助: $ man stg- (详细文档也可通过HTML 格式获得) 开始使用 StGit不是一个可单独使用的程序——他操作一个已用git init 或git clone创建好的Git仓库。所以请先获取一个这样的仓库;如果你手头没有,试试下面的范例: $ git clone git://repo.or.cz/stgit.git $ cd stgit 在创建StGit补丁前,你必须先运行stg init: $ stg init 这个命令针对当前分支初始化StGit的元数据。(如果还想获得另一分支的StGit补丁,你必须到另一个分支中再次运行stg init。) 注作为快捷指令,stg clone将会在执行git clone后运行stg init。 创建一个补丁 现在准备创建我们的第一个补丁: $ stg new my-first-patch 这将会创建一个名为my-first-patch的补丁,并且打开一个编辑器让你编辑补丁的提交信息。(如果你没有在命令行中给出补丁名,StGit 将会自动通过提交信息的第一行生成补丁名。)这个补丁是空的,可以通过运行stg show命令看出。 $ stg show 但这不会保持太久!用你中意的文本编辑器打开一个文件(译者注:已被跟踪的文件),做些修改并保存。此时,你的代码树中就有了本地的变更: $ stg status M stgit/main.py 然后refresh(刷新)补丁: $ stg refresh 瞧 - 这个补丁不再是空的: $ stg show commit 3de32068c600d40d8af2a9cf1f1c762570ae9610 Author: Audrey U. Thor Date: Sat Oct 4 16:10:54 2008 +0200 Tell the world that I've made a patch diff --git a/stgit/main.py b/stgit/main.py

相关主题
相关文档
最新文档