`
liyonghui160com
  • 浏览: 777129 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux下git安装配置

    博客分类:
  • git
阅读更多

 

       Git是分布式的版本控制系统,实际上是不需要固定的服务器的,Git与svn的最大区别是,它的使用流程不需要联机,可以先将对代码的修改,评论,保存在本机。等上网之后,再实时推送过去。同时它创建分支与合并分支更容易,推送速度也更快。

Gitosis则是方便通过Git与ssh架设中央服务器的软件。

 

一、Linux下git安装配置

 

1、yum安装

 

    yum install git git-svn git-email git-gui gitk

 

2、源码安装

 

安装依赖

 

yum -y install zlib-devel

yum -y install libcurl-devel

yum -y install expat-devel

yum -y install perl-ExtUtils-MakeMaker

yum -y install tcl

 

yum -y install gettext

 

从https://www.kernel.org/pub/software/scm/git/下载最新git-1.8.0.tar.gz ,执行下面命令

 

    tar -xzf git-1.8.0.tar.gz

    cd git-1.8.0

    ./configure -prefix=/usr/local/git --with-curl  --with-expat

    make && make install

 

修改/etc/profile,在PATH中加入git路径,并执行source /etc/profile

 

    GIT_HOME=/usr/local/git

    PATH=$PATH:$GIT_HOME/bin:$GIT_HOME/libexec/git-core

    export PATH GIT_HOME

 

确认是否安装成功

 

    git --version

    git version 1.8.0

 

可能碰见的错误:

 

a、GIT错误

usr/local/git/share/locale'

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.

BEGIN failed--compilation aborted at Makefile.PL line 3.

 

解决:yum install perl-ExtUtils-MakeMaker

 

b、tclsh failed; using unoptimized loading

MSGFMT    po/de.msg make[1]: *** [po/de.msg] Error 127

 

解决:yum install tcl

 

c、/bin/sh: msgfmt: command not found

make: *** [po/build/locale/da/LC_MESSAGES/git.mo] Error 127

 

解决:yum install gettext-devel

 

d、git clone时候提示fatal: Unable to find remote helper for 'https'

 

解决:yum install libcurl-devel

 

3、复制命令补全脚本 并执行脚本

 

    cp contrib/completion/git-completion.bash /etc/

    sh /etc/git-completion.bash

 

试试输入”git li”, 再按下 TAB 就可以自动提示补全。

 

二、Windows下git使用

 

windows下有下个几个git客户端,我选择的是Cygwin。

 

Cygwin http://www.cygwin.com/ 安装参考  cygwin安装说明

 

msysGit http://msysgit.github.com/

 

TortoiseGit http://code.google.com/p/tortoisegit/

 

三、git使用说明

 

1、添加git配置信息

 

    git config --global user.name "Steven"

    git config --global user.email seyo816@email.com

 

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

 

查看全局配置信息,可以看到我们配置的用户名和邮箱。

 

    $ cat ~/.gitconfig

    [user]

    name = Steven

    email = seyo816@email.com

 

2、创建本地仓储

 

    #创建版本库目录

    mkdir -p gitdemo

    cd gitdemo

    echo “README” > readme.txt

    #初始化版本库

    git init

    Initialized empty Git repository in /data/gitdemo/.git/

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

    git add .

    #创建提交

    git commit -m 'init'

    [master (root-commit) 55f9dbb] init

    1 file changed, 1 insertion(+)

    create mode 100644 readme.txt

    #查看git文件信息

    git show

    commit 55f9dbb575f536702eb02a09fe65d8d060769380

    Author: Steven <seyo816@email.com>

    Date:   Thu Nov 15 23:11:55 2012 +0800

 

    init

 

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

    new file mode 100644

    index 0000000..6372732

    --- /dev/null

    +++ b/readme.txt

    @@ -0,0 +1 @@

    +“README”

 

3、git基本操作

 

    #clone一个项目

 

    git clone ssh://git@lifeba_vps:bqueue.git

 

    添加文件到版本库

 

    git add test2.txt

    git commit -m "add test2.txt"

    git push

 

    获取最新代码

 

    git pull

    git fetch git路径

 

    更新文件提交

 

    git commit -a  或 git commit -a -e        提交全部修改文件,并调用vim编辑提交日志。

    git push

 

    查看状态

 

    git status #查看版本库的状态。可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。 建议每次commit前都要通过该命令确认库状态。

 

    查看未版本控制

 

    git clean -dxf          用于清除未跟踪文件。

    git clean -dnf          可以显示需要删除的文件,但不包括被.gitignore忽略的。

 

    冲突解决

 

    git rebase

    git add -u  表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。

    git rebase --continue #有冲突继续解决,重复这这些步骤,直到rebase完成。

    如果中间遇到某个补丁不需要应用,可以用下面命令忽略:

    git rebase --skip

    如果想回到rebase执行之前的状态,可以执行:

    git rebase --abort

 

    注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。

 

四、gitosis安装和配置

 

1、gitosis安装

 

    cd /disk/src

    git clone https://github.com/res0nat0r/gitosis.git

    cd gitosis/

    python setup.py install

 

2、gitosis配置

 

a、

 

因为要涉及到ssh操作,使用必须建个单独的用户,不能使用超级用户。

 

    #创建目录

    mkdir /data/git

    #添加git用户,并且制定到/data/git目录下

    useradd \

    -r \

    -s /bin/sh \

    -c 'git version control' \

    -d /data/git \

    git

    #对git目录设置用户和组为git

    chown git:git /data/git

    #设置成功后,执行ll看到用户和组都是git

    ll

    drwxr-xr-x 2 git  git  4096 Nov 16 00:41 git

 

b、

 

在本机的客户端上面生成ssh的key,然后上传到gitosis的服务器上面。

 

#生成pub文件,将pub文件放置到:/tmp/id_rsa.pub

 

    ssh-keygen -t rsa

 

gitosis的服务器切换到git用户:

 

    su - git

 

然后执行

 

    -sh-4.1$ gitosis-init < /tmp/id_rsa.pub

    Initialized empty Git repository in /data/git/repositories/gitosis-admin.git/

    Reinitialized existing Git repository in /data/git/repositories/gitosis-admin.git/

 

注意在root中执行:sudo -H -u git gitosis-init < /tmp/id_rsa.pub ,会出现下面异常,所以切换到git用户。

 

File "/usr/local/bin/gitosis-init", line 8, in <module> 异常。

 

执行成功后查看key是不是已经设置成功,执行下面命令后可以看到我们提交的id_rsa.pub内容

 

    cat ~/.ssh/authorized_keys

 

对post-update目录设置权限

 

    chmod 755 /data/git/repositories/gitosis-admin.git/hooks/post-update

 

五、本机操作gitosis-admin项目

 

通过上面的操作后,本机的客户端已经可以通过ssh访问到服务器的gitosis-admin项目(本身也是通过git来管理的),这样可以通过本机的git操作来同步到服务器的gitosis中。

 

1、Creating new repositories,本地拉下gitosis-admin项目。

 

    git clone git@lifeba_vps:gitosis-admin.git

 

    Cloning into 'gitosis-admin'...

 

注意,可能出现下面的错误:

 

    Traceback (most recent call last):

    File "/usr/local/bin/gitosis-serve", line 8, in <module>

    load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-serve')()

    File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run

    return app.main()

    File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main

    self.handle_args(parser, cfg, options, args)

    File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/serve.py", line 213, in handle_args

    os.execvp('git', ['git', 'shell', '-c', newcmd])

    File "/usr/local/lib/python2.7/os.py", line 344, in execvp

    _execvpe(file, args)

    File "/usr/local/lib/python2.7/os.py", line 380, in _execvpe

    func(fullname, *argrest)

    OSError: [Errno 2] No such file or directory

    fatal: The remote end hung up unexpectedly

 

解决方法:在gitosis服务器上面建个软连接

 

    ln -s /usr/local/git/bin/git /usr/local/bin/git

 

2、gitosis-admin项目说明

 

a、文件说明

 

    cd gitosis-admin

    Administrator@Steven-PC /cygdrive/e/research/gitosis-admin

    $ ls -l

    总用量 1

    -rw-r--r--  1 Administrator None 93 十一 16 01:49 gitosis.conf

    drwxr-xr-x+ 1 Administrator None  0 十一 16 01:49 keydir

 

gitosis.conf是gitosis的配置文件,用于配置用户和权限

keydir/是所有组成员的公钥

我们可以在本地修改配置更改权限,然后push到服务端后,服务器端就立刻生效

 

b、添加一个其他客户端ssh支持,这样其他的客户端可以访问到gitosis的对应项目。

 

先查看现有的配置,下面只有一个gitosis-admin组,members中的Administrator@Steven-PC就是本机客户端名,writable,表示对gitosis-admin项目有读写操作权限。这些都是上面我们通过ssh来配置生成的。

 

    $ cat gitosis.conf

    [gitosis]

 

    [group gitosis-admin]

    members = Administrator@Steven-PC

    writable = gitosis-admin

 

c、现在我们往gitosis上面提交一个bqueue项目。

 

先定义账号权限,我们在后面自定义一个组bqueue,同样指定Administrator@Steven-PC可以读写bqueue项目。

 

    [group bqueue]

    members = Administrator@Steven-PC

    writable = bqueue

 

然后push到服务器,将本地的配置push到gitosis服务器上面。

 

    git commit -a -m "Allow Steven write access to bqueue"

    [master 9b1959b] Allow Steven write access to bqueue

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

 

    $ git push

    Counting objects: 5, done.

    Delta compression using up to 4 threads.

    Compressing objects: 100% (3/3), done.

    Writing objects: 100% (3/3), 378 bytes, done.

    Total 3 (delta 0), reused 0 (delta 0)

    To git@173.230.147.166:gitosis-admin.git

    507d7cf..9b1959b  master -> master

 

上面的操作就更新了服务端的权限。

 

d、push本地的bqueue项目到gitosis服务器上面。

 

完成了上面的权限设置后,就可以通过下面命令,将本地的bqueue项目提交给gitosis服务器。

 

    git remote add origin ssh://git@lifeba_vps/bqueue.git

 

    git push origin master

 

    Initialized empty Git repository in /data/git/repositories/bqueue.git/

    Counting objects: 192, done.

    Delta compression using up to 4 threads.

    Compressing objects: 100% (181/181), done.

    Writing objects: 100% (192/192), 921.81 KiB, done.

    Total 192 (delta 54), reused 0 (delta 0)

    To ssh://git@lifeba_vps/bqueue.git

    * [new branch]      master -> master

 

六、访问bqueue项目

 

上面我们已经提交了一个bqueue项目到gitosis服务器,如何让其他用户访问并操作该项目呢?

 

首先必须先配置ssh权限,在需要访问该bqueue项目的客户端上面,同样要生成一个ssh的key。

 

在目标客户端机上面执行下面命令,将生成id_rsa.pub提交给拥有gitosis-admin控制权限的用户,这里就是:Administrator@Steven-PC用户。

 

    #生成ssh的key

    ssh-keygen -t rsa

 

在Administrator@Steven-PC的机子上面做如下操作,先切换到gitosis-admin项目下:

 

    cd keydir/ #将 我们将id_rsa.pub重名为 lifeba@vps.pub ,并放到这里。

    git add keydir/lifeba@vps.pub #添加到git缓存中。

 

修改gitosis.conf 加入lifeba@vps

 

    [group bqueue]

    members = Administrator@Steven-PC lifeba@vps

    writable = bqueue

 

提交并推送到gitosis服务器

 

    git commit -a -m "Allow lifeba@vps write access to bqueue"

    git push

 

完成上面的操作后,目标客户端就可以通过git clone来访问bqueue项目了。执行下面命令来clone项目。

 

    git clone git@lifeba_vps:bqueue.git

 

可能出现的错误:

 

1、Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

fatal: Could not read from remote repository.

 

ssh的权限没配置好。

 

2、ERROR:gitosis.serve.main:Repository read access denied

fatal: Could not read from remote repository.

 

gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = lifeba@vps,但keydir中的公密名却叫id_rsa.pub

 

七、git常用命令

 

    git pull --rebase

    git rebase --continue

    git pull --rebase其实就等于git fetch + git rebase

 

    git diff 查看修改和缓存中的修改信息

    git diff cache 查看缓存中的和commit中的修改信息

    git branch -a           查看所有分支。

    git branch new_branch   创建新的分支。

    git branch -d branch    删除分支。

    git checkout branch     切换当前分支。-f参数可以覆盖未提交内容。

    git branch -v

    git remote -v

    .gitignore 在规则建立之前的就已经在代码库中的文件不会受到忽略规则的影响,要移除这些文件,只能输入git rm filename来移除。

    git rm -f *.o 取消跟踪并在工作目录中删除

    git rm --cached readme.txt 取消跟踪不在工作目录中删除

    git mv file_from file_to 相当于 mv README.txt README $ git rm README.txt $ git add README

    git log -p -2  -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:

    git log --stat 简要显示

    git log --pretty=format:"%h - %an, %ar : %s"

    git log --pretty=format:"%h %s" --graph

    git log --since=2.weeks

    git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \

    --before="2008-11-01" --no-merges -- t/

    git reset HEAD benchmarks.rb 取消已经暂存的文件

    git checkout -- benchmarks.rb 取消对文件的修改

 

    git remote -v 查看现有的远程仓库

    git remote add pb git://github.com/paulboone/ticgit.git 添加一个远程仓库 并用pb命名。

    git remote rm paul 删除远程仓库

    git remote rename pb paul 重名远程仓库 本地也会跟着修改

    git remote 查看远程参考

    git remote show

 

    git branch 显示所有开发分支

    git branch experimental 创建新的开发分支

    git checkout experimental 切换到”experimental”分支

    git merge experimental 合并分支,如果这个两个分支间的修改没有冲突(conflict), 那么合并就完成了。如有有冲突,输入下面的命令就可以查看当前有哪些文件产生了冲突:$ git diff,git commit -a

    git branch -d experimental 删除分支(合并过才删除)

    git branch -D crazy-idea 强制删除分支

分享到:
评论

相关推荐

    linux git配置

    ### Linux下Git服务器安装配置详解 #### 一、前言 在Linux环境下配置Git服务器是一项常见但又重要的任务。本文将详细介绍如何在Red Hat Linux系统上安装并配置Git服务器,包括Git服务端软件的安装、基本配置以及...

    linux下git安装使用[文].pdf

    Linux 下 Git 安装使用指南 在 Linux 系统中,Git 是一个非常 popular 的版本控制系统,广泛应用于软件开发、团队协作和项目管理中。在本文中,我们将详细介绍如何在 Linux 系统中安装和配置 Git 环境,包括设置...

    搭建Linux Git服务器以及配置tortoiseGit

    在Linux环境下,搭建Git服务器是一个关键步骤,用于实现代码版本控制和团队协作。以下是如何在Linux上设置Git服务器的详细过程: 1. **创建Git服务器用户**: 首先,我们需要创建一个新的系统用户,例如`gitser`,...

    git安装配置以及在intellijidea中使用git的配置.pdf

    Git 的安装与配置是使用 Git 的基础,以下将详细介绍各个操作系统的安装步骤及在 IntelliJ IDEA 中的配置。 在 Linux 上安装 Git,通常可以通过包管理器进行,如在 Debian 或 Ubuntu 系统上使用 `sudo apt-get ...

    git离线安装包(包含所有依赖包)git-1.8.3.1-32.el7-8x86-64,linux离线安装git安装包含所有依赖

    在Linux环境下安装Git,通常需要解决各种依赖问题。这个离线安装包已经包含了所有依赖包,这意味着用户无需单独下载和安装这些依赖。这对于那些运行旧版Linux发行版(如这里的`el7`,可能是Red Hat Enterprise Linux...

    Linux系统安装git服务器.pdf

    Linux系统安装Git服务器的过程中,涉及的知识点非常广泛,从基础的Git概念到具体的操作步骤,涵盖了对版本控制系统的理解,分布式与集中式版本控制的比较,以及在Linux环境下安装和配置Git服务器的详细过程。...

    配置git配置git配置git配置git.zip

    打开RT-Thread Studio,点击“工具”菜单,选择“选项”,在弹出的设置窗口中找到“Git”选项卡,配置Git的路径,确保与系统安装的Git版本匹配。 现在,你可以创建一个新的项目或者克隆一个现有的Git仓库。在项目...

    linux搭建git服务器

    ### Linux下搭建Git服务器知识点详解 #### 一、环境配置 **服务器端环境:** - 操作系统:CentOS 6.6 - Git版本:1.7.1 **客户端环境:** - 操作系统:Windows 10 - Git版本:2.8.4.windows.1 #### 二、Git的...

    linux下搭建git服务器步骤

    ### Linux下搭建Git服务器步骤详解 #### 环境配置 - **服务器**: CentOS 6.6 + Git (version 1.7.1) - **客户端**: Windows 10 + Git (version 2.8.4.windows.1) #### 第一步: 安装Git 在服务器端与客户端上分别...

    git2.7.4及相关依赖库(麒麟linux可用).zip

    如果您打算在麒麟Linux上部署Gitblit,需要确保Java运行环境(JRE)已经安装,并遵循Gitblit官方文档进行配置。 总结来说,Git2.7.4是一个强大且功能丰富的版本控制系统,这个压缩包包含了麒麟Linux上运行Git所需的...

    git安装配置.docx

    - 默认情况下,Git会安装Git Bash、Git GUI、MSys Git Bash Shell等组件。 - **环境变量:**安装过程中会询问是否修改环境变量,通常建议勾选以便在任何位置都能使用Git命令。 - 这样做可以将Git添加到系统PATH...

    git Linux安装包

    在Linux操作系统中,Git的安装过程相对简单,但依然需要遵循一定的步骤。本文将详细介绍如何在Linux上安装Git,以及如何处理提供的`git-2.9.1`压缩包。 首先,让我们了解一下Git的基本概念。Git是一款免费且开源的...

    Git安装使用教程

    - 初始化后会在当前目录下创建一个名为`.git`的隐藏子目录,用于存放Git的所有数据和配置信息。 ##### 4.2 添加文件到版本控制 - **添加文件命令**:`git add *`,该命令会将当前目录下的所有文件添加到版本控制中...

    linux7离线git安装包及其rpm依赖

    redhat7.6离线安装git整套 1.安装依赖库,进入libs目录 rpm -ivh *.rpm --force --... 配置指定编译后安装的目录:./configure --prefix=/usr/local/git 编译安装:make && make install 查看版本:git --version

    linux-gitshell客户端增强

    此外,调整Git配置(如`core.autocrlf`、`color.ui`)可以改善用户界面和交互体验。 3. **Git GUI工具集成**:虽然Git Shell是命令行工具,但可以与图形用户界面(GUI)工具如GitKraken、SourceTree或GitHub ...

    Linux安装Git(图文).docx

    Linux 安装 Git 图文指南 Linux 安装 Git 可以通过两种方式实现:使用 yum 安装和自定义安装。下面将详细介绍这两种方法。 使用 yum 安装 使用 yum 安装 Git 非常简单,只需要输入以下命令即可: `yum install ...

    git安装配置以及在intellijidea中使用git的配置 (2).docx

    在Linux上安装Git,你可以通过命令行工具查看是否已安装Git,输入`git`,如果没有安装,系统会提示你如何安装。在基于Debian的系统如Ubuntu中,你可以使用`sudo apt-get install git`命令进行安装。如果系统中存在名...

    git安装文件.zip

    Git的Windows版本通常提供两种安装方式:Git Bash(模拟Linux终端环境)和Git for Windows(带图形界面的Git工具,如Git GUI和Gitk)。在“git安装文件.zip”中包含的“Git-2.19.0-64-bit.exe”就是Git for Windows...

    linux命令行上直接显示git当前分支.bashrc配置

    linux在命令行上直接显示git分支的配置,不用再使用git branch命令查看当前分支了。

Global site tag (gtag.js) - Google Analytics