基于linux ubuntu git安装与配置

1.安装git

># sudo apt-get build-dep git-core git-doc

这个会安装git-core和git-doc依赖的库。

接下来去官网下载git的源码包。把下载的git包解压。

在解压的目录下执行下列的命令来编译git

>#make prefix=/usr/local all doc

然后需要安装git

>#sudo make install install install-doc

这样你的git就可以被该计算机上的所有用户使用了。

你可以使用下面的命令来查看自己的git版本号。

>#git --version

**********************************************

CentOS下面安装:

 rpm -Uvh

 

 yum -y install git gitweb gitosis

 

**********************************************

2.配置git

由于git并不像svn那样有中心仓库,所以并不需要想中心仓库提供用户名和密码等。但是我们还是需要告诉

要通过用户名和email地址来给git传递一些信息。这些信息通常被设置为global。这里必须设置的两个是user.name

和user.email。user.name是提交代码时显示的名称,user.email可以被其他开发者用于联系你使用。

>#git config --global user.name "your name"

>#git config --global user.email "youraddr@xxx.com"

然后我们可以通过下面的命令来查看是否修改成功了呢。

>#git config --global --list

我们应该会看到我们刚才配置的信息。

除此之外,还可以调整git的显示颜色来区分不同的变化。

>#git config --global color.ui "auto"

3.查看git帮助

>#git help

命令可以查看git的命令

The most commonly used git commands are:

add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG
如果想查看git的具体命令使用可以通过下面命令做到,例如查看clone命令。

>#git help clone

到这我们已经配置好我们的git了,接下来就可以创建我们的工程了。

创建工程

1.创建一个版本库

 

git的版本库创建跟svn和cvs相比,可能显得很是与众不同。在git中创建版本库只需要在你的工程目录下执行简单的命令就可以做到。

例如我们创建一个工程目录 project,然后在此目录下初始化我们的版本库吧。

># mkdir project

>#cd project

>#git init

在我们执行完git init 后执行以下 ls -a 我们就可以看到在project目录下生成了一个.git目录,这个目录就是用来记录我们提交的版本信息的了。

project目录就是我们工作的工程目录了。

2.添加文件并提交

通过上面的步骤我们只是获得了一个空的版本库,下面开始向版本库中添加文件。例如我们新创建了一个文件hellogit.c

>#touch hellogit.c

如何把这个文件加入到版本库中呢,需要两步,首先要用git add 命令告诉git去把此文件加到它的索引。然后执行git commit提交。

这个和svn的过程一样一样滴。

>#git add hellogit.c

>#git commit -m "first add"

commit可以文件列表,例如git commit hellogit.c hello.c -m “ second add”。如果什么都不写就会提交所有改变的文件。

-m后面引号内是必须要填写的提交log,交代你做了那些改动。

3.查看改动和日志

如果我们对hellogit.c的内容做了改动。

>#git status

命令就可以查看本地工程和版本库的有什么变化。在本例子中

# On branch master

# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: hellogit.c
#
你会看到如下信息,信息中显示了我们对hellogit.c进行了修改。但是还没有提交到库上。

我们需要执行commit命令告诉git变化,注意这次不需要在add了,一个文件只需要add一次就可以了。

>#git commit hellogit.c -m "second add" \

-m "add mian"

注意git支持多个-m,多行注释,很棒哟。

然后我们可以通过git log -l来查看提交过的日志文件

>#git log -l

git基本操作

>git log -1

显示一条版本提交日志

>git status

显示当前本地代码与版本库之间的变化

>git branch branch_1.0 master

从主干分支上创建一个branch_1.0分支出来

>git checkout branch_1.0

检出branch_1.0这个分支到工作目录,此时在执行的操作全都是在branch_1.0下了,不会影响master。

>git commit -a

提交当前本地改变的到版本库

git checkout不仅可以检出版本,也可以选择检出某个文件,这样做的结果是会丢弃本地该文件的修改,所以要考虑好再用哟。

>git checkout filename.java

 

当我们的项目到达一定的git还支持为版本库添加一个tag,作为一个阶段性标记。

>git tag 1.0 branch_1.0

这样我们就为branch_1.0添加了一个tag,我们可以通过

>git tag

命令查看tag的列表。

现在我们拥有master和branch_1.0两个分支,有时我们可能需要合并我们的分支。

>git checkout master

切换到主分支

>gti rebase branch_1.0

此时branch_1.0会被合并到主分支中,我们可以清除掉branch_1.0这个没用的分支了。

>git branch -d branch_1.0

因为我们之前为branch_1.0打过tag,即使分支已经删除,我们还是可以从tag中从新创建新的分支的哟。

>git branch branch_1.0.1 1.0

这样就从tag 1.0这个tag的历史位置从新创建了一个新的分支,是不是很方便呀。

>git checkout branch_1.0.1

>git log --pretty=oneline

这样我们还是可以看到在打1.0tag之前的log信息的。

 

除了打tag之外,git还为我们提供了一另外一个方式。就是可以创建我们发行版本的档案。通常是tarball或是zip文件

那么如何创建gzip的tarball呢

>git archive --format=tar \

--prefix=myprogect/ 1.0 \

| gzip > myproject.tar.gz

在这个命令里有3个参数

--format 告诉git库生成的文件是tar

--prefix告诉git库把myproject目录下的tag是1.0的内容保存到备份的档案中。

最后一行使用了一条unix命令,把输出文件压缩成tar.gz包。

除了生成tar.gz包外,还可以生成zip包,命令如下

git archive --format-zip \

--prefix=myproject/ 1.0 \

>myprogect.zip

这样就打包成了一个zip包了。你可以把这些文件发给你的团队其它成员了哟。

git操作进阶(分支,合并,查不同) >#git add -i

采用交互的方式将工作区代码加入本地代码缓冲区中

>#git add -p

出现选项y/n/a/d/e

如果选择y将工作区代码加入本地代码缓冲区中,选择n或是d终止提交操作,选择a添加

提交代码到中心仓库的方法

1.>#git add some-file

#git commit -m "some word"

适合添加简单的注释时使用

2. # git commit -m "some word" -a

提交本地所有改变的代码到中心库

3 # git commit -m " some word" some-file

提交指定文件名的文件到中心库

查看不同

#git diff

结果显示本地工作区中还没有提交到缓冲区

#git diff --cached

显示缓冲区与中心仓库中的不同

#git diff HEAD

比较本地工作区与缓冲区和中心仓库的不同

文件重命名和移动

#git mv index.html hello.html

修改了文件名

修改后需要提交变化

#git commit -m "rename index.html"

理解和使用分支

#git branch -m master mymaster

#git branch

修改了master的名字为mymaster

#git branch newbranch

创建了一个newbranch分支,但是此时的工作分支仍然是master,需要去哦git chekout newbranch后才会切换分支。

通过下面的命令可以做到创建分支的同时切换分支

#git checkout -b another master

这样就从master分支中生成一个another分支,并把分支切换到another下。

#git branch -a

显示本地和远程的所有分支

删除分支

#git branch -d branch-name

分支重命名

#git branch -m orgin-name new-name

在分支间转移变化

转移分为三种:

1.Straight merging

检出工作分支

#git checkout master

转移要提交到当前分支的分支

#git merge alternate

alternate为要合并到master中的分支

此种方法会将alternate中的所有log信息存入到master中

2.squashing commits

有两个分支master分支和contact分支

将contact合并到master中

#git checkout master

#git merge --sqush contact

还需要执行git commit -m ""后提交变化

这种提交方式会将contact的log信息要锁到一次性提交的log中

3.cherry-pick commit

这是一种通过提交名称来合并的方法,可以只合并一次或指定次提交

#git checkout contact

检出一个分支

#git commit -m "add something"

此时会出现提交信息,假如提交号是:321d76f

我们就可以通过这个号来将这次提交内容同步到其它分支了

#git checkout master

#git cherry-pick 321d76f

这个执行过程git已经执行了一个commit过程。

如果有的时候我们要直接提交怎么办呢?

#git cherry-pick -n 321d76f

通过添加-n参数,git只会将变化提交到缓存中,没有执行commit

待你修改完其它后可以一起commit了

#git commit

恢复变化

#git reset --hard HEAD

可以移除最后一次提交过程