git配置大全

git配置大全
git配置大全

########################

写在前面

#############################

https://www.360docs.net/doc/9f18098769.html,/windows/825009.html

https://www.360docs.net/doc/9f18098769.html,/luckydmz/archive/2013/02/03/86960.html

由于系统环境和相关工具的差别,git服务器功能在windows下不能尽情发挥,建议使用linux 系统作为windows服务器。

gitlab功能类似于自己搭建的github,比gitweb高端。

git服务器可以采用四种方式的协议:本地传输,SSH 协议,Git 协议和HTTP 协议。其中SSH协议是推荐的协议。

ssh协议默认,git协议只读高效,http协议易架设只读

而权限管理器有两种Gitosis和Gitolite。Gitosis已经于09年停止更新,不过仍然可以用。gitolite 一直还在更新版本。相对来叫Gitolite的权限控制更加强大和复杂一些。

git repository 管理工具:gitolite 、gitosis 、gerrit

服务器git项目用bare repository,通常用做共享空库,以git结尾, 客户端git项目用no bare repository

########################

GIT SVR Windows安装配置

#############################

软件需求:

1.windowXP,win7 都测试通过

2.Copssh_

3.1.4_Installer.exe

3.Git-1.7.3.1-preview20101002.exe

搭建git服务器步骤:

1.安装copssh

1.1 我选择安装路径c:\ICW,其他选项都选默认.

1.2 设置环境变量,系统的Path中添加C:\ICW\bin

1.3 右键我的电脑,选择管理,打开系统工具->本地用户和组->用户, 在用户窗口点击右键,选择新用户,用户名输入git,密码输入git.

1.4.选择git用户,右键选属性, 点击隶属于->添加,使git用户被添加到administrator组,并拥有administrator权限.

1.5 选择开始->所有程序->copssh->0.1 activate a user,在user name下拉列表中选择刚刚新建的git用户,点击next,输入Type a passhrase,并记住输入的Type a passhrase,点击activate.

2.安装git

2.1 我选择安装路径c:\git,其他选项都选默认.

2.2 设置环境变量,系统的Path中添加C:\git\bin

3.检验设置

3.1 打开一个cmd,输入ssh git@127.0.0.1,按照提示输入密码,(我上面设置的是git),出现远程登录,git用户ssh登录成功

3.2 登录成功后,可以使用ls,cd,rm,chmod等命令,但是不能使用git命令,也就是不能使用ssh 协议管理git仓库.

4.设置使用ssh协议管理git 仓库

4.1开始-> CopSSH > Start a unix bash shell.

4.2 cd /Bin

4.3 创建4个符号连接指向git.exe, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe:

$ ln -s /cygdrive/c/git/bin/git.exe git.exe

$ ln -s /cygdrive/c/git/libexec/git-core/git-receive-pack.exe git-receive-pack.exe

$ ln -s /cygdrive/c/git/libexec/git-core/git-upload-archive.exe git-upload-archive.exe

$ ln -s /cygdrive/c/git/libexec/git-core/git-upload-pack.exe git-upload-pack.exe

或者:复制几个必要的文件到G:\SSH\bin下,从git安装目录下的libexec\git-core文件夹下将git.exe, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe复制到G:\SSH\bin。

4.4 退出git账号,打开一个cmd,输入ssh git@127.0.0.1,重新登录,登录成功后,输入git 命令,会出现git命令的使用帮助.

或者直接打开一个cmd,输入git,同样会出现git命令的使用帮助,表明可以正常使用git 命令了.

4.5 启动一个cmd,进入到C:\ICW\var目录下,依次执行

mkdir test

cd test

git init

touch a b

git add .

git config --global https://www.360docs.net/doc/9f18098769.html, "jackylee" //用于添加提交用户信息

git config --global user.email "orange.jackylee@https://www.360docs.net/doc/9f18098769.html,"//用于添加用户提交信息

git commit -m "first commit"

使用git show 可以看到提交的信息和用户信息

或者:来到G:\SSH\home\<用户名>\文件夹下,新建一个文件夹作为git仓库,例如

G:\SSH\home\daimingzhuang\myapp,我是通过TortoiseGit创建仓库,当然你也可以用其他gitGUI工具或通过命令行,记得勾选bare

git --bare init

git config --global https://www.360docs.net/doc/9f18098769.html, "chuanwen.yin" //用于添加提交用户信息

git config --global user.email "chuanwen.yin@https://www.360docs.net/doc/9f18098769.html,"//用于添加用户提交信息git commit -m "first commit"

4.5 启动一个cmd,我准备要把服务器管理的test仓库拷贝到e:\, 所以输入cd e:\ ,执行拷贝

git clone git@127.0.0.1:../../var/test test (路径是相对路径,相对于git账号登录后的c:\ICW\home\git目录)

4.6拷贝完成.cmd输出.

Cloning into test...

git@127.0.0.1's password:

remote: Counting objects: 3, done.

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

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

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

4.7 创建git账号信息,用于提交时区分哪个账号提交了什么内容.

登录git账号,输入pwd,输出为/home/git,

输入

touch .gitconfig

echo "[user]" > .gitconfig

echo "name=jackylee" >> .gitconfig

echo "email=orange.jackylee@https://www.360docs.net/doc/9f18098769.html," >> .gitconfig

其他账号创建与创建git账号相同

5 让git 管理其他路径下文件.比如要让git管理e:\project目录

启动cmd,进入e:\project

依次输入

git init

git add .

git commit -m "first commit"

启动一个cmd,进入C:\ICW\var

依次输入

ln -s e:\project project

现在已经可以使用git clone来管理e:\project目录了

输入:git clone git@127.0.0.1:../../var/project project_backup

以上一个完整的xp git服务器已经设置完成.

问题备忘:

- if cannot push to remote repo

change the bare = true in \.git\config

if is bare option, cannot checkout

- ssh git@v:..\..\test test

related location

3. c:\git;c:\icw has settings

Config CopSSH with Git path.

Open C:\ICW\etc\profile with your favorite editor, add :/cygdrive/c/git/bin:/cygdrive/c/git/libexec/git-core (don’t forget the starting colon) to PATH,and restart copssh.

#################

客户端使用:

###################

点击git bash进去,总的告诉git你自己是谁吧,然后弄个密码。

$ git config --global https://www.360docs.net/doc/9f18098769.html, "aserver"

$ git config --global user.email aserver@https://www.360docs.net/doc/9f18098769.html,

$ ssh-keygen -C ' aserver@https://www.360docs.net/doc/9f18098769.html,' -t rsa

上面最后生成密钥的时候,会提示文件存放及名称,一律默认即可,然后记住这个密码id_rsa是你的私钥

id_rsa.pub是你的公钥(需要提供给copssh的git账户用作你的识别证明,用文本编辑器打开)

known_hosts是记录你本机访问过的git站点

##############

配置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/9f18098769.html, author #将用户名设为author

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

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

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

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

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

$ git config user.email nickname@https://www.360docs.net/doc/9f18098769.html, #将用户邮箱设为nickname@https://www.360docs.net/doc/9f18098769.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/9f18098769.html,

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

$ cat .git/config | head -3

[user]

name = nickname

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

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

先过一遍第一章中提到的Git 配置细节。Git 使用一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig文件,该文件含有对系统上所有用户及他们所拥有的仓库都生效的配置值(译注:gitconfig是全局配置文件),如果传递--system选项给git config命令,Git 会读写这个文件。

接下来Git 会查找每个用户的~/.gitconfig文件,你能传递--global选项让Git读写该文件。

最后Git 会查找由用户定义的各个库中Git 目录下的配置文件(.git/config),该文件中的值只对属主库有效。以上阐述的三层配置从一般到特殊层层推进,如果定义的值有冲突,以后面层中定义的为准,例如:在.git/config和/etc/gitconfig的较量中,.git/config取得了胜利。虽然你也可以直接手动编辑这些配置文件,但是运行git config命令将会来得简单些。

SetEnv GIT_PROJECT_ROOT C:/Users/Tommy/git

SetEnv GIT_HTTP_EXPORT_ALL

ScriptAliasMatch \

"(?x)^/git/(.*/(HEAD | \

info/refs | \

objects/(info/[^/]+ | \

[0-9a-f]{2}/[0-9a-f]{38} | \

pack/pack-[0-9a-f]{40}\.(pack|idx)) | \

git-(upload|receive)-pack))$" \

"C:/Program Files/Git/libexec/git-core/git-http-backend.exe/$1"

Allow From All

第一行的GIT_PROJECT_ROOT 告诉git 你的仓库位置, 第二行告诉git 在这个目录下的所有项目应该通过http 发布(默认情况下, git 只发布那些含有git-daemon-export-ok 文件的仓库),剩下的ScriptAliasMatch 配置告诉apache , 如果开头是git 的url 请求交给git-http-backend.exe 来处理。

####################################

#gitosis管理配置(仅限linux)

#######################################

获得gitosis包:

$ cd /tmp

$ git clone git://https://www.360docs.net/doc/9f18098769.html,/gitosis.git

$ cd gitosis

$ sudo python setup.py install

切换到git用户下:

---------------------------

$ su - git

默认状态下,gitosis会将git仓库放在git用户的home下,所以我们做一个链接到/opt/git $ ln -s /opt/git /home/git/repositories

$ exit

再次返回到默认用户。

如果你将作为git服务器的管理员,那么在你的电脑(而不是服务运行的电脑)上生成ssh 公钥:

$ ssh-keygen -t rsa

这里我遇到一个问题就是我的公钥中有未识别的字符,我只能修改了我的PS1。(vi ~/.bashrc)

将公钥拷贝到/tmp下,并给其他人以读权限:

$ cp ~/.ssh/id_rsa.pub /tmp && chmod a+r /tmp/id_rsa.pub

让gitosis运行起来:

$ sudo -H -u git gitosis-init < /tmp/id_dsa.pub

Initialized empty Git repository in /opt/git/gitosis-admin.git/

Reinitialized existing Git repository in /opt/git/gitosis-admin.git/

gitosis的有趣之处在于,它通过一个git仓库来管理配置文件,仓库就放在了/opt/git/gitosis-admin.git。我们需要为一个文件加上可执行权限:

$sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update

我们在服务器上新建一个空的项目仓库供大家测试一下,我建了一个叫“teamwork”的仓库。

切换到git用户:

$ su - git

$ cd /opt/git

$ mkdir teamwork.git

$ cd teamwork.git

$ git init --bare

在你自己的电脑里,把gitosis-admin.git这个仓库clone下来,这样你就可以以管理员的身份修改配置了。

在你的电脑里:

$ git clone git@git-server-ip:gitosis-admin.git

$ cd gitosis-admin

现在把你们team所有人的ssh公钥文件都拿来,按名字命名一下,比如kevin.pub, cindy.pub, peng.pub等,统统拷贝到keydir下:

$ cp ~/kevin.pub ~/cindy.pub ~/peng.pub keydir/

修改gitosis.conf文件,我的配置大致如下:

[gitosis]

[group gitosis-admin]

writable = gitosis-admin

members = volans

[group team]

writable = teamwork

members = volans kevin cindy

[group team_ro]

readonly = teamwork

members = peng

这个配置文件表达了如下含义:gitosis-admin组成员有volans,该组对gitosis-admin仓库有读写权限;team组有volans, kevin, cindy三个成员,改组对teamwork仓库有读写权限;team_ro组有peng一个成员,对teamwork仓库有只读权限。

当然目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。

加入新文件、提交并push到git服务器:

$ git add .

$ git commit -am "add teamwork project and users"

$ git push origin master

好了,现在服务器就搭建完了,并且有一个空的项目teamwork在服务器上。接下来呢?当然是测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始化一个版本。就我来做吧

$ cd

$ mkdir teamwork-ori

$ cd teamwork-ori

$ git init

$ echo "/*add what you want*/" > main.c

$ git add .

$ git commit -am "initial version"

$ git remote add oringin git@git-server-ip:teamwork.git

$ git push origin master

到此为止teamwork已经有了一个版本了,team的其他成员只要先clone一下teamwork仓库,就可以任意玩儿了。

$ git clone git@git@git-server-ip:teamwork.git

#######################

服务器上的GIT

#######################

https://www.360docs.net/doc/9f18098769.html,/lib/view/1328069988843

到目前为止,你应该已经学会了使用Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在自己不开机的时候也能从仓库获取数据—拥有一个更稳定的公共仓库十分有用。因此,更好的合作方式是建立一个大家都可以访问的共享仓库,从那里推送和拉取数据。我们将把这个仓库称为“Git 服务器”;代理一个Git 仓库只需要花费很少的资源,几乎从不需要整个服务器来支持它的运行。

架设一台Git 服务器并不难。第一步是选择与服务器通讯的协议。本章第一节将介绍可用的协议以及各自优缺点。下面一节将介绍一些针对各个协议典型的设置以及如何在服务器上实施。最后,如果你不介意在他人服务器上保存你的代码,又想免去自己架设和维护服务器的麻烦,倒可以试试我们介绍的几个仓库托管服务。

如果你对架设自己的服务器没兴趣,可以跳到本章最后一节去看看如何申请一个代码托管服务的账户然后继续下一章,我们会在那里讨论分布式源码控制环境的林林总总。

远程仓库通常只是一个_裸仓库(bare repository)_ —即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是Git 的数据。简单地说,裸仓库就是你工作目录中.git 子目录内的内容。

4.1 协议

Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和HTTP 协议。下面分别介绍一下哪些情形应该使用(或避免使用)这些协议。

值得注意的是,除了HTTP 协议外,其他所有协议都要求在服务器端安装并运行Git。

本地协议

最基本的就是_本地协议(Local protocol)_,所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如NFS)拥有访问权,或者比较少见的多人共用同一台电脑的情况。后面一种情况并不安全,因为所有代码仓库实例都储存在同一台电脑里,增加了灾难性数据损失的可能性。

如果你使用一个共享的文件系统,就可以在一个本地文件系统中克隆仓库,推送和获取。克隆的时候只需要将远程仓库的路径作为URL 使用,比如下面这样:

$ git clone /opt/git/project.git

或者这样:

$ git clone file:///opt/git/project.git

如果在URL 开头明确使用file:// ,那么Git 会以一种略微不同的方式运行。如果你只给出路径,Git 会尝试使用硬链接或直接复制它所需要的文件。如果使用了file:// ,Git 会调用它平时通过网络来传输数据的工序,而这种方式的效率相对较低。使用file:// 前缀的主要原因是当你需要一个不包含无关引用或对象的干净仓库副本的时候—一般指从其他版本控制系统导入的,或类似情形(参见第9 章的维护任务)。我们这里仅仅使用普通路径,这样更快。

要添加一个本地仓库作为现有Git 项目的远程仓库,可以这样做:

$ git remote add local_proj /opt/git/project.git

然后就可以像在网络上一样向这个远程仓库推送和获取数据了。

优点

基于文件仓库的优点在于它的简单,同时保留了现存文件的权限和网络访问权限。如果你的团队已经有一个全体共享的文件系统,建立仓库就十分容易了。你只需把一份裸仓库的副本放在大家都能访问的地方,然后像对其他共享目录一样设置读写权限就可以了。我们将在下一节“在服务器上部署Git ”中讨论如何导出一个裸仓库的副本。

这也是从别人工作目录中获取工作成果的快捷方法。假如你和你的同事在一个项目中合作,他们想让你检出一些东西的时候,运行类似git pull /home/john/project 通常会比他们推送到服务器,而你再从服务器获取简单得多。

缺点

这种方法的缺点是,与基本的网络连接访问相比,难以控制从不同位置来的访问权限。如果你想从家里的笔记本电脑上推送,就要先挂载远程硬盘,这和基于网络连接的访问相比更加困难和缓慢。

另一个很重要的问题是该方法不一定就是最快的,尤其是对于共享挂载的文件系统。本地仓库只有在你对数据访问速度快的时候才快。在同一个服务器上,如果二者同时允许Git 访问本地硬盘,通过NFS 访问仓库通常会比SSH 慢。

SSH 协议

Git 使用的传输协议中最常见的可能就是SSH 了。这是因为大多数环境已经支持通过SSH 对服务器的访问—即便还没有,架设起来也很容易。SSH 也是唯一一个同时支持读写操作的网络协议。另外两个网络协议(HTTP 和Git)通常都是只读的,所以虽然二者对大多数人都可用,但执行写操作时还是需要SSH。SSH 同时也是一个验证授权的网络协议;而因为其普遍性,一般架设和使用都很容易。

通过SSH 克隆一个Git 仓库,你可以像下面这样给出ssh:// 的URL:

$ git clone ssh://user@server:project.git

或者不指明某个协议—这时Git 会默认使用SSH :

$ git clone user@server:project.git

如果不指明用户,Git 会默认使用当前登录的用户名连接服务器。

优点

使用SSH 的好处有很多。首先,如果你想拥有对网络仓库的写权限,基本上不可能不使用SSH。其次,SSH 架设相对比较简单—SSH 守护进程很常见,很多网络管理员都有一些使用经验,而且很多操作系统都自带了它或者相关的管理工具。再次,通过SSH 进行访问是安全的—所有数据传输都是加密和授权的。最后,和Git 及本地协议一样,SSH 也很高效,会在传输之前尽可能压缩数据。

缺点

SSH 的限制在于你不能通过它实现仓库的匿名访问。即使仅为读取数据,人们也必须在能通过SSH 访问主机的前提下才能访问仓库,这使得SSH 不利于开源的项目。如果你仅仅在公司网络里使用,SSH 可能是你唯一需要使用的协议。如果想允许对项目的匿名只读访问,那么除了为自己推送而架设SSH 协议之外,还需要支持其他协议以便他人访问读取。

Git 协议

接下来是Git 协议。这是一个包含在Git 软件包中的特殊守护进程;它会监听一个提供类似于SSH 服务的特定端口(9418),而无需任何授权。打算支持Git 协议的仓库,需要先创建git-export-daemon-ok 文件—它是协议进程提供仓库服务的必要条件—但除此之外该服务没有什么安全措施。要么所有人都能克隆Git 仓库,要么谁也不能。这也意味着该协议通常不能用来进行推送。你可以允许推送操作;然而由于没有授权机制,一旦允许该操作,网络上任何一个知道项目URL 的人将都有推送权限。不用说,这是十分罕见的情况。

优点

Git 协议是现存最快的传输协议。如果你在提供一个有很大访问量的公共项目,或者一个不需要对读操作进行授权的庞大项目,架设一个Git 守护进程来供应仓库是个不错的选择。它使用与SSH 协议相同的数据传输机制,但省去了加密和授权的开销。

缺点

Git 协议消极的一面是缺少授权机制。用Git 协议作为访问项目的唯一方法通常是不可取的。一般的做法是,同时提供SSH 接口,让几个开发者拥有推送(写)权限,其他人通过git:// 拥有只读权限。Git 协议可能也是最难架设的协议。它要求有单独的守护进程,需要定制—我们将在本章的“Gitosis”一节详细介绍它的架设—需要设定xinetd 或类似的程序,而这些工作就没那么轻松了。该协议还要求防火墙开放9418 端口,而企业级防火墙一般不允许对这个非标准端口的访问。大型企业级防火墙通常会封锁这个少见的端口。

HTTP/S 协议

最后还有HTTP 协议。HTTP 或HTTPS 协议的优美之处在于架设的简便性。基本上,只需要把Git 的裸仓库文件放在HTTP 的根目录下,配置一个特定的post-update 挂钩(hook)就可以搞定(Git 挂钩的细节见第7 章)。此后,每个能访问Git 仓库所在服务器上web 服务的人都可以进行克隆操作。下面的操作可以允许通过HTTP 对仓库进行读取:

$ cd /var/www/htdocs/

$ git clone --bare /path/to/git_project gitproject.git

$ cd gitproject.git

$ mv hooks/post-update.sample hooks/post-update

$ chmod a+x hooks/post-update

这样就可以了。Git 附带的post-update 挂钩会默认运行合适的命令(git update-server-info)来确保通过HTTP 的获取和克隆正常工作。这条命令在你用SSH 向仓库推送内容时运行;之后,其他人就可以用下面的命令来克隆仓库:

$ git clone https://www.360docs.net/doc/9f18098769.html,/gitproject.git

在本例中,我们使用了Apache 设定中常用的/var/www/htdocs 路径,不过你可以使用任何静态web 服务—把裸仓库放在它的目录里就行。Git 的数据是以最基本的静态文件的形式提供的(关于如何提供文件的详情见第9 章)。

通过HTTP 进行推送操作也是可能的,不过这种做法不太常见,并且牵扯到复杂的WebDAV 设定。由于很少用到,本书将略过对该内容的讨论。如果对HTTP 推送协议感兴趣,不妨打开这个地址看一下操作方法:https://www.360docs.net/doc/9f18098769.html,/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt 。通过HTTP 推送的好处之一是你可以使用任何WebDAV 服务器,不需要为Git 设定特殊环境;所以如果主机提供商支持通过WebDAV 更新网站内容,你也可以使用这项功能。

优点

使用HTTP 协议的好处是易于架设。几条必要的命令就可以让全世界读取到仓库的内容。花费不过几分钟。HTTP 协议不会占用过多服务器资源。因为它一般只用到静态的HTTP 服务提供所有数据,普通的Apache 服务器平均每秒能支撑数千个文件的并发访问—哪怕让一个小型服务器超载都很难。

你也可以通过HTTPS 提供只读的仓库,这意味着你可以加密传输内容;你甚至可以要求客

户端使用特定签名的SSL 证书。一般情况下,如果到了这一步,使用SSH 公共密钥可能是更简单的方案;不过也存在一些特殊情况,这时通过HTTPS 使用带签名的SSL 证书或者其他基于HTTP 的只读连接授权方式是更好的解决方案。

HTTP 还有个额外的好处:HTTP 是一个如此常见的协议,以至于企业级防火墙通常都允许其端口的通信。

缺点

HTTP 协议的消极面在于,相对来说客户端效率更低。克隆或者下载仓库内容可能会花费更多时间,而且HTTP 传输的体积和网络开销比其他任何一个协议都大。因为它没有按需供应的能力—传输过程中没有服务端的动态计算—因而HTTP 协议经常会被称为_傻瓜(dumb)_协议。更多HTTP 协议和其他协议效率上的差异见第9 。

4.2 在服务器上部署Git

开始架设Git 服务器前,需要先把现有仓库导出为裸仓库—即一个不包含当前工作目录的仓库。做法直截了当,克隆时用--bare 选项即可。裸仓库的目录名一般以.git 结尾,像这样:

$ git clone --bare my_project my_project.git

Initialized empty Git repository in /opt/projects/my_project.git/

该命令的输出或许会让人有些不解。其实clone 操作基本上相当于git init 加git fetch,所以这里出现的其实是git init 的输出,先由它建立一个空目录,而之后传输数据对象的操作并无任何输出,只是悄悄在幕后执行。现在my_project.git 目录中已经有了一份Git 目录数据的副本。

整体上的效果大致相当于:

$ cp -Rf my_project/.git my_project.git

但在配置文件中有若干小改动,不过对用户来讲,使用方式都一样,不会有什么影响。它仅取出Git 仓库的必要原始数据,存放在该目录中,而不会另外创建工作目录。

把裸仓库移到服务器上

有了裸仓库的副本后,剩下的就是把它放到服务器上并设定相关协议。假设一个域名为https://www.360docs.net/doc/9f18098769.html, 的服务器已经架设好,并可以通过SSH 访问,我们打算把所有Git 仓库储存在/opt/git 目录下。只要把裸仓库复制过去:

$ scp -r my_project.git user@https://www.360docs.net/doc/9f18098769.html,:/opt/git

现在,所有对该服务器有SSH 访问权限,并可读取/opt/git 目录的用户都可以用下面的命令克隆该项目:

$ git clone user@https://www.360docs.net/doc/9f18098769.html,:/opt/git/my_project.git

如果某个SSH 用户对/opt/git/my_project.git 目录有写权限,那他就有推送权限。如果到该项目目录中运行git init 命令,并加上--shared 选项,那么Git 会自动修改该仓库目录的组权限为可写(译注:实际上--shared 可以指定其他行为,只是默认为将组权限改为可写并执行g+sx,所以最后会得到rws。)。

$ ssh user@https://www.360docs.net/doc/9f18098769.html,

$ cd /opt/git/my_project.git

$ git init --bare --shared

由此可见,根据现有的Git 仓库创建一个裸仓库,然后把它放上你和同事都有SSH 访问权的服务器是多么容易。现在已经可以开始在同一项目上密切合作了。

值得注意的是,这的的确确是架设一个少数人具有连接权的Git 服务的全部—只要在服务器上加入可以用SSH 登录的帐号,然后把裸仓库放在大家都有读写权限的地方。一切都准备停当,无需更多。

下面的几节中,你会了解如何扩展到更复杂的设定。这些内容包含如何避免为每一个用户建立一个账户,给仓库添加公共读取权限,架设网页界面,使用Gitosis 工具等等。然而,只是和几个人在一个不公开的项目上合作的话,仅仅是一个SSH 服务器和裸仓库就足够了,记住这点就可以了。

小型安装

如果设备较少或者你只想在小型开发团队里尝试Git ,那么一切都很简单。架设Git 服务最复杂的地方在于账户管理。如果需要仓库对特定的用户可读,而给另一部分用户读写权限,那么访问和许可的安排就比较困难。

SSH 连接

如果已经有了一个所有开发成员都可以用SSH 访问的服务器,架设第一个服务器将变得异常简单,几乎什么都不用做(正如上节中介绍的那样)。如果需要对仓库进行更复杂的访问控制,只要使用服务器操作系统的本地文件访问许可机制就行了。

如果需要团队里的每个人都对仓库有写权限,又不能给每个人在服务器上建立账户,那么提供SSH 连接就是唯一的选择了。我们假设用来共享仓库的服务器已经安装了SSH 服务,而且你通过它访问服务器。

有好几个办法可以让团队的每个人都有访问权。第一个办法是给每个人建立一个账户,直截了当但略过繁琐。反复运行adduser 并给所有人设定临时密码可不是好玩的。

第二个办法是在主机上建立一个git 账户,让每个需要写权限的人发送一个SSH 公钥,然后将其加入git 账户的~/.ssh/authorized_keys 文件。这样一来,所有人都将通过git 账户访问主机。这丝毫不会影响提交的数据—访问主机用的身份不会影响提交对象的提交者信息。

另一个办法是让SSH 服务器通过某个LDAP 服务,或者其他已经设定好的集中授权机制,来进行授权。只要每个人都能获得主机的shell 访问权,任何可用的SSH 授权机制都能达到相同效果。

4.3 生成SSH 公钥

大多数Git 服务器都会选择使用SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的~/.ssh 目录。进去看看:

$ cd ~/.ssh

$ ls

authorized_keys2 id_dsa known_hosts

config id_dsa.pub

关键是看有没有用something 和something.pub 来命名的一对文件,这个something 通常就是id_dsa 或id_rsa。有.pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连.ssh 目录都没有,可以用ssh-keygen 来创建。该程序在Linux/Mac 系统上由SSH 包提供,而在Windows 上则包含在MSysGit 包里:

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/schacon/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /Users/schacon/.ssh/id_rsa.

Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub.

The key fingerprint is:

43:c5:5b:5f:b1:f1:50:43:ad:20:a6:92:6a:1f:9a:3a schacon@agadorlaptop.local

它先要求你确认保存公钥的位置(.ssh/id_rsa),然后它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空。

现在,所有做过这一步的用户都得把它们的公钥给你或者Git 服务器的管理员(假设SSH 服务被设定为使用公钥机制)。他们只需要复制.pub 文件的内容然后发邮件给管理员。公钥的样子大致如下:

$ cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU

GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3

Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA

t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En

mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@agadorlaptop.local

关于在多个操作系统上设立相同SSH 公钥的教程,可以查阅GitHub 上有关SSH 公钥的向导:https://www.360docs.net/doc/9f18098769.html,/guides/providing-your-ssh-key。

4.4 架设服务器

现在我们过一边服务器端架设SSH 访问的流程。本例将使用authorized_keys 方法来给用

户授权。我们还将假定使用类似Ubuntu 这样的标准Linux 发行版。首先,创建一个名为‘git’的用户,并为其创建一个.ssh 目录。

$ sudo adduser git

$ su git

$ cd

$ mkdir .ssh

接下来,把开发者的SSH 公钥添加到这个用户的authorized_keys 文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:

$ cat /tmp/id_rsa.john.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L

ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k

Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez

Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv

O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq

dAv8JggJICUvax2T9va5 gsg-keypair

只要把它们逐个追加到authorized_keys 文件尾部即可:

$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys

$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys

$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys

现在可以用--bare 选项运行git init 来建立一个裸仓库,这会初始化一个不包含工作目录的仓库。

$ cd /opt/git

$ mkdir project.git

$ cd project.git

$ git --bare init

这时,Join,Josie 或者Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过shell 登入主机并创建一个裸仓库目录。我们不妨以gitserver 作为git 用户及项目仓库所在的主机名。如果在网络内部运行该主机,并在DNS 中设定gitserver 指向该主机,那么以下这些命令都是可用的:

# 在John 的电脑上

$ cd myproject

$ git init

$ git add .

$ git commit -m 'initial commit'

$ git remote add origin git@gitserver:/opt/git/project.git

$ git push origin master

这样,其他人的克隆和推送也一样变得很简单:

$ git clone git@gitserver:/opt/git/project.git

$ vim README

$ git commit -am 'fix for the README file'

$ git push origin master

用这个方法可以很快捷地为少数几个开发者架设一个可读写的Git 服务。

作为一个额外的防范措施,你可以用Git 自带的git-shell 工具限制git 用户的活动范围。只要把它设为git 用户登入的shell,那么该用户就无法使用普通的bash 或者csh 什么的shell 程序。编辑/etc/passwd 文件:

$ sudo vim /etc/passwd

在文件末尾,你应该能找到类似这样的行:

git:x:1000:1000::/home/git:/bin/sh

把bin/sh 改为/usr/bin/git-shell (或者用which git-shell 查看它的实际安装路径)。该行修改后的样子如下:

git:x:1000:1000::/home/git:/usr/bin/git-shell

现在git 用户只能用SSH 连接来推送和获取Git 仓库,而不能直接使用主机shell。尝试普通SSH 登录的话,会看到下面这样的拒绝信息:

$ ssh git@gitserver

fatal: What do you think I am? A shell?

Connection to gitserver closed.

4.5 公共访问

匿名的读取权限该怎么实现呢?也许除了内部私有的项目之外,你还需要托管一些开源项目。或者因为要用一些自动化的服务器来进行编译,或者有一些经常变化的服务器群组,而又不想整天生成新的SSH 密钥—总之,你需要简单的匿名读取权限。

或许对小型的配置来说最简单的办法就是运行一个静态web 服务,把它的根目录设定为Git 仓库所在的位置,然后开启本章第一节提到的post-update 挂钩。这里继续使用之前的例子。假设仓库处于/opt/git 目录,主机上运行着Apache 服务。重申一下,任何web 服务程序都可以达到相同效果;作为范例,我们将用一些基本的Apache 设定来展示大体需要的步骤。

首先,开启挂钩:

$ cd project.git

$ mv hooks/post-update.sample hooks/post-update

$ chmod a+x hooks/post-update

如果用的是Git 1.6 之前的版本,则可以省略mv 命令—Git 是从较晚的版本才开始在挂钩实例的结尾添加.sample 后缀名的。

post-update 挂钩是做什么的呢?其内容大致如下:

$ cat .git/hooks/post-update

#!/bin/sh

exec git-update-server-info

意思是当通过SSH 向服务器推送时,Git 将运行这个git-update-server-info 命令来更新匿名HTTP 访问获取数据时所需要的文件。

接下来,在Apache 配置文件中添加一个VirtualHost 条目,把文档根目录设为Git 项目所

在的根目录。这里我们假定DNS 服务已经配置好,会把对.gitserver 的请求发送到这台主机:

ServerName git.gitserver

DocumentRoot /opt/git

Order allow, deny

allow from all

另外,需要把/opt/git 目录的Unix 用户组设定为www-data ,这样web 服务才可以读取仓库内容,因为运行CGI 脚本的Apache 实例进程默认就是以该用户的身份起来的:$ chgrp -R www-data /opt/git

重启Apache 之后,就可以通过项目的URL 来克隆该目录下的仓库了。

$ git clone http://git.gitserver/project.git

这一招可以让你在几分钟内为相当数量的用户架设好基于HTTP 的读取权限。另一个提供

非授权访问的简单方法是开启一个Git 守护进程,不过这将要求该进程作为后台进程常驻—接下来的这一节就要讨论这方面的细节。

4.6 GitWeb

现在我们的项目已经有了可读可写和只读的连接方式,不过如果能有一个简单的web 界面访问就更好了。Git 自带一个叫做GitWeb 的CGI 脚本,运行效果可以到https://www.360docs.net/doc/9f18098769.html, 这样的站点体验下(见图4-1)。

Figure 4-1. 基于网页的GitWeb 用户界面

如果想看看自己项目的效果,不妨用Git 自带的一个命令,可以使用类似lighttpd 或webrick 这样轻量级的服务器启动一个临时进程。如果是在Linux 主机上,通常都预装了lighttpd ,可以到项目目录中键入git instaweb 来启动。如果用的是Mac ,Leopard 预装了Ruby,所以webrick 应该是最好的选择。如果要用lighttpd 以外的程序来启动git instaweb,可以通过--httpd 选项指定:

$ git instaweb --httpd=webrick

[2009-02-21 10:02:21] INFO WEBrick 1.3.1

[2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0]

这会在1234 端口开启一个HTTPD 服务,随之在浏览器中显示该页,十分简单。关闭服务时,只需在原来的命令后面加上--stop 选项就可以了:

$ git instaweb --httpd=webrick --stop

如果需要为团队或者某个开源项目长期运行GitWeb,那么CGI 脚本就要由正常的网页服务来运行。一些Linux 发行版可以通过apt 或yum 安装一个叫做gitweb 的软件包,不妨首先尝试一下。我们将快速介绍一下手动安装GitWeb 的流程。首先,你需要Git 的源码,其中带有GitWeb,并能生成定制的CGI 脚本:

$ git clone git://https://www.360docs.net/doc/9f18098769.html,/pub/scm/git/git.git

$ cd git/

$ make GITWEB_PROJECTROOT="/opt/git" \

prefix=/usr gitweb/gitweb.cgi

$ sudo cp -Rf gitweb /var/www/

注意,通过指定GITWEB_PROJECTROOT 变量告诉编译命令Git 仓库的位置。然后,设置Apache 以CGI 方式运行该脚本,添加一个VirtualHost 配置:

ServerName gitserver

DocumentRoot /var/www/gitweb

Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch

AllowOverride All

order allow,deny

Allow from all

AddHandler cgi-script cgi

DirectoryIndex gitweb.cgi

不难想象,GitWeb 可以使用任何兼容CGI 的网页服务来运行;如果偏向使用其他web 服务器,配置也不会很麻烦。现在,通过http://gitserver 就可以在线访问仓库了,在http://git.server 上还可以通过HTTP 克隆和获取仓库的内容。

4.7 Gitosis

把所有用户的公钥保存在authorized_keys 文件的做法,只能凑和一阵子,当用户数量达到几百人的规模时,管理起来就会十分痛苦。每次改删用户都必须登录服务器不去说,这种做

Eclipse中git的基本使用

一、安装E G I T插件 二、使用EGIT前的配置 三、新建GIT仓库 四、配置.gitignore文件 五、查看历史记录 六、推送远程仓库 七、远程GIT仓库 八、解决推送冲突 九、重置功能 一、安装EGIT插件 现在的eclipse一般都自带了,如果没有,使用EclipseMarketplace,搜索EGit 二、使用EGIT前的配置 配置个人信息,最重要的是https://www.360docs.net/doc/9f18098769.html,和user.email Preferences>Team>Git>Configuration addEntry 三、新建GIT仓库 新建hh_monitor项目 File>Team>ShareProject选择GIT 创建仓库后,在$ProjectWorks\hh_monitor目录下的.git文件夹,就是git的仓库地址。 和CVS、SVN不同,GIT不会在每一个目录下建立版本控制文件夹,仅在根目录下建立仓库。 同时,eclipse中的project也建立git版本控制,此时未创建分支,处于NO-HEAD状态

文件夹中的符号””表示此文件夹处于untracked状态,这样就成功创建GIT 仓库。 四、配置.gitignore文件 配置.gitignore,排除不需要提交的文件。 此时我们尝试做一次提交,Team->Commit 如上图所示,Author和Committer会默认为Git配置的用户信息。 下面的Files窗口中可以看到此次提交的文件,其中有非常多带有work的文件,此时,在我们的project中链接的work也被GIT默认到版本控制中了。 work下面的文件不需要进行版本控制的,我们可以通过配置.gitignore来排除这这个文件夹。 打开Navigator窗口,在project根目录中添加.gitignore文件,将需要排除控制的目录写入.gitignore文件中。 再次尝试commit,需要提交的文件已经被过滤。 首次提交后,会自动生成master分支 然后在com.hh中新建一个文件,可以看到图标依然是问号,处于untracked状态,即git没有对此文件进行监控。 通过Team->Addtoindex可以将文件加入git索引,进行版本监控 PS:可以看到图标显示也有了变化(EGIT中只要Commit就可以默认将untracked的文件添加到索引再提交更新,不需要分开操作) 也可以通过Team->Untrack将文件从索引控制中排除。 将此次新增的文件commit到仓库中,文件将处于unmodified状态,或者说,这就是一种staged状态 然后修改文件的内容,文件将处于modified状态 五、查看历史记录 Team->Showinhistory可以查看版本历史提交记录 可以选择对比模式 六、推送远程仓库

Git 常用命令速查

一、Git 常用命令速查 git push origin :分支名删除远程库分支 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshow git push origin master 将文件给推到服务器上 git remote show origin 显示远程库origin里的资源 git push origin master:develop git push origin master:hb-dev 将本地库与服务器上的库进行关联 git checkout --track origin/dev 切换到远程dev分支 git branch -D master develop 删除本地库develop git checkout -b dev 建立一个新的本地分支dev git merge origin/dev 将分支dev与当前分支进行合并 git checkout dev 切换到本地dev分支 git remote show 查看远程库 git add . 目录下所有的文件 git rm 文件名(包括路径) 从git中删除指定文件 git clone git://https://www.360docs.net/doc/9f18098769.html,/schacon/grit.git 从服务器上将代码给拉下来 git config --list 看所有用户 git ls-files 看已经被提交的 git rm [file name] 删除一个文件 git commit -a 提交当前repos的所有的改变 git add [file name] 添加一个文件到git index git commit -v 当你用-v参数的时候可以看commit的差异 git commit -m "This is the message describing the commit" 添加commit信息git commit -a -a是代表add,把所有的change加到git index里然后再commit git commit -a -v 一般提交命令 git log 看你commit的日志 git diff 查看尚未暂存的更新 git rm a.a 移除文件(从暂存区和工作区中删除) git rm --cached a.a 移除文件(只从暂存区中删除) git commit -m "remove" 移除文件(从Git中删除) git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除) git diff --cached 或$ git diff --staged 查看尚未提交的更新 git stash push 将文件给push到一个临时空间中 git stash pop 将文件从临时空间pop下来 --------------------------------------------------------- git remote add origin git@https://www.360docs.net/doc/9f18098769.html,:username/Hello-World.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/9f18098769.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/9f18098769.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 的文件,我们现在来查看一下它的内容:

gerrit git 常用操作

gerrit/git常用操作 1、代码下载方法 a. 下载整个工程代码: repoinit …… repo sync b. 下载部分模块代码 repoinit …… repo sync + projectPath 2、通过repo 提交代码 a.下载所需修改模块的代码 mkdir Test cd Test repoinit …… repo sync projectName b. 建立新分支:repo start branchName . / repo start branchNameprojectName c. 修改代码 d. git add . (提交所有修改到git缓冲区) / git add + FileName(只提交指定文件) e. git commit -s 格式要求: module: submodule: Message Title Blablabla Message Content Blablablablablablablablabla Ticket: APOLLO-20472 f. repo upload . / repo upload projectName g. 评审代码并submit。 3、直接通过gerrit pick Patch a.在gerrit上打开需要pick的patch b.点击“Cherry Pick To”按钮,在弹出的对话框中输入需要pick到的branch. 注意:如果无法直接pick过来,网页会直接报错,此时则需要按下面的步骤4手动pick,并解决冲突。 c.成功pick之后,会生成一个新的gerrit提交,并自动在Reviewer中加入了原Author,merge 之前让原Author确认。 d.评审代码并submit。 4、Pick冲突解决: 如果在gerrit上直接pick产生冲突,需要手动pick,并解决冲突:

gitlab使用指南

gitlab使用指南 1 gitlab介绍 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab是基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab,它使用Ruby语言写成。后来,一些部分用Go语言重写。 2应用特点 1.Web框架使用RubyonRails。 2.基于MIT代码发布协议。 3.需要gitolite协同工作 3优点 GitLab为整个DevOps生命周期提供解决方案 1.管理 统计和分析功能。 GitLab提供统计数据和洞察力,以帮助提高GitLab在组织中的价值。 2.计划 项目计划和管理功能。 使用GitLab灵活的项目管理工具可视化,确定优先级,协调和跟踪进度。 3.创造 源代码以及数据创建和管理功能。 将源代码整合到一个易于管理和控制的分布式版本控制系统中,而不会影响工作流程。GitLab的Git存储库附带分支工具和访问控制,可为项目和代码的协作提供可扩展的单一事实来源。 4.校验 测试,代码质量和持续集成功能。 内置的静态代码分析,代码测试,代码质量,依赖项检查和Review Apps可以更快地发现错

误,提高安全性并缩短反馈周期。自定义您的批准工作流控件,自动测试代码质量,并为每个代码更改启动过渡环境。 GitLab持续集成是下一代测试系统,可以扩展以更快地运行测试。 5.包 Docker容器注册表。 GitLab软件包允许组织将GitLab用作各种常见软件包管理器的专用存储库。用户能够构建和发布程序包,这些程序包可以很容易地作为下游项目中的依赖项使用。 6.发布 应用程序发布和交付功能。 花更少的时间配置工具,而花更多的时间创建工具。无论要部署到一台服务器还是数千台服务器,都可以通过GitLab内置的持续交付和部署来自信,安全地构建,测试和发布代码。 7.配置 应用程序和基础结构配置工具。 使用GitLab Auto DevOps自动执行从构建到部署和监视的整个工作流程。最佳实践模板可帮助您从最小到零的配置开始。然后自定义所有内容,从构建包到CI / CD。 8.监控 应用程序监视和指标功能。 确保应用程序始终响应并可用。 GitLab会收集并显示已部署应用程序的性能指标,因此可以立即知道代码更改如何影响生产环境。 9.安全 安全功能功能。 检查应用程序是否存在安全漏洞,这些漏洞可能导致未经授权的访问,数据泄漏和服务拒绝。GitLab将对应用程序代码执行静态和动态测试,查找已知缺陷并在合并请求中报告这些缺陷,以便可以在合并之前修复它们。安全团队可以使用仪表板来获得项目和组的高级视图,并在需要时启动补救过程。 4运行gitlab gitlab-ctl start

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/9f18098769.html,/p/msysgit/ 6) 大家可以试试国内提供的git服务。https://www.360docs.net/doc/9f18098769.html, 那么,简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了Git 的思想和基本的工作原理,用起来就会知其所以然,游刃

git基本操作命令

GIT日常操作命令 1、git三种状态 已提交(committed)已修改(modified)已暂存(staged) 2、获取项目的git仓库 git init//从当前目录初始化 git clone gitosis@192.168.2.4:soul/soul //从现有仓库克隆 3、配置git仓库相关信息 git config https://www.360docs.net/doc/9f18098769.html, "yayun.tian" git config user.email yayun.tian@https://www.360docs.net/doc/9f18098769.html, ….... 4、检查当前文件状态 git status 5、跟踪新文件 git add gir add --all//一次性跟踪当前目录全部文件注:可以创建一个名为.gitignore 的文件,列出要忽略的文件模式,例如: # – 此为注释将被git 忽略 *.a # 忽略所有.a 结尾的文件 !lib.a # 但lib.a 除外 /TODO # 仅仅忽略项目根目录下的TODO 文件,不包括subdir/TODO build/ # 忽略build/ 目录下的所有文件 doc/*.txt # 会忽略doc/notes.txt 但不包括doc/server/arch.txt 6、移除文件 git rm //移除暂存区的内容而且工作目录也连带删除注:如果仅仅想删除暂存区可以加上cached选项 — 7、提交 先用git diff --color 查看确认修改 git commit -a -m“comment”//comment代表此次修改的注释 git commit --amend //修改最后一次提交 如果忘记暂存某些文件就提交了,可以暂存后使用amend再次提交

Git的使用说明

Git的使用说明 2011.6.18 一,git的简单介绍 git是一个快速可扩充的分布式版本控制系统。 Git的绝大部分操作在本地完成,不用和集中的代码管理服务器交互,本地提交为commit,待完成一部分工作觉得有把握提交到服务器则是push。终于可以随时随地大胆地check in代码了。只有最终完成的版本才需要向一个中心的集中的代码管理服务器提交。 Git的分支管理branch管理容易多了,无论是建立新的branch,还是在branch之间切换都一条命令完成,不需要建立多余的目录。 二,git的个人本地使用及操作 1,创建Git库 cd 源码目录 git init #初始化在源码目录内生成一个.git的目录 2,注册用户信息(网上资料说是必需注册才能使用git工具,局域网内可不注册,直接用主机名,如pengwufeng@ubuntu) git config https://www.360docs.net/doc/9f18098769.html, XXX 用户名 git config user.email XXX 用户邮箱 git config –list #查看用户信息 3,向git库中添加或删除文件 git add XX #加单个文件 git add . #加所有 4,向版本库提交变化 git commit #提交(系统会默认让用户添加提交信息) git commit –m “XXXX”#直接添加简单提交信息 git status #查看项目状态 git log #查看版本信息 git log –p #查看版本信息并显示每次修改的diff git show sdjf974654dd…. #查看指定版本信息 #(show后面为每次提交系统自动生成的一串哈希值) git show sdji97 #一般只使用版本号的前几个字符即可 5,撤销与恢复 git reset git reset --hard #回到原来编辑的地方 #(同样适用于团队对于其他人的修改恢复)git reset --hard sdv143kvf…... #可回到指定的版本 #(hard后面为每次提交系统自动生成的一串哈希值)

git使用指南

Git使用指南 Li Yanrui v0.1,20080728 liyanrui.m2@https://www.360docs.net/doc/9f18098769.html,

前言 Git是什么 非常简单地说,Git是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。所谓版本控制系统(Version Control System),从狭义上来说,它是软件项目开发过程中用于储存我们所写的代码所有修订版本的软件,但事实上我们可以将任何对项目有帮助的文档交付版本控制系统进行管理。 2005年,Torvalds开始着手开发Git是为了作为一种过渡方案来替代BitKeeper,后者之前一直是Linux内核开发人员在使用的版本控制工具,当时由于自由软件社区中的许多人觉得BitKeeper的使用许可证并不适合自由软件社区的工作,因此Linus决定着手开发许可证更为自由灵活的版本控制系统。尽管最初Git的开发是为了辅助Linux内核开发的过程,但是现在很多其他自由软件项目中也使用了Git实现代码版本管理,譬如,https://www.360docs.net/doc/9f18098769.html,项目、许多https://www.360docs.net/doc/9f18098769.html,的项目、Ruby项目等。 为什么使用版本控制系统 版本控制系统是为懒人准备的,它让懒人们比那些善于备份文档的勤劳人拥有更干净的文件系统以及更多的可以活着的时间。 本文档主要内容 在第1章中讲述如何使用Git管理自己的个人文档,主要是初步熟悉Git的诸多概念及其日常基本命令的使用。第2章中主要讲述如何基于Git实现多人协作的项目开发模式,以此扭转当前实验室成员在项目研发中各自为政或不能有效沟通的现状。第3章讲述如何利用Git强大的项目分支管理功能实现良好风格的项目协同开发模式。第4章为Git使用之FAQ,用于记载在本实验室推广使用Git过程中诸位同学所遇到的一些细节问题。

Git常用操作命令收集

Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://https://www.360docs.net/doc/9f18098769.html,/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git remote add [name] [url] 删除远程仓库:$ git remote rm [name] 修改远程仓库:$ git remote set-url --push [name] [newUrl] 拉取远程仓库:$ git pull [remoteName] [localBranchName] 推送远程仓库:$ git push [remoteName] [localBranchName] 2)分支(branch)操作相关命令 查看本地分支:$ git branch 查看远程分支:$ git branch -r 创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支切换分支:$ git checkout [name] 创建新分支并立即切换到新分支:$ git checkout -b [name] 删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项 合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并 创建远程分支(本地分支push到远程):$ git push origin [name] 删除远程分支:$ git push origin :heads/[name] 3)版本(tag)操作相关命令

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版本库操作手册及管理规范

FESCO Adecco 公司内部自建系统GIT代码版本库操作手册及管理规范 版本<1.0>

文档版本历史

【目录】 1概述 (4) 1.1编写目的 (4) 1.2适用范围 (4) 1.3名词解释 (4) 2GIT操作使用说明 (5) 2.1GIT工具的安装及权限开放申请 (5) 2.2GIT工具的使用 (6) 2.2.1从GIT导入项目 (6) 2.2.2创建分支 (11) 2.2.3代码提交 (12) 2.2.4版本切换 (14) 2.2.5代码同步 (14) 2.2.6其他 (15) 3GIT版本库管理规范 (15) 4GIT版本结构图 (17) 5GIT代码管理执行流程图 (18)

1概述 1.1 编写目的 本文主要用于对公司内部自主研发的系统进行代码的版本管理,同时指导公司内部开发人员使用GIT工具进行统一的管理规范。 本文所形成的规范将作为IT部门开发的标准流程进行管控,不定时的进行线上环境的抽查,各项目架构师也应当以此文进行严格的版本管理及执行监督。 1.2 适用范围 所有公司内部自主研发的项目。 1.3 名词解释 UAT环境:用于用户做验收时进行测试的环境,其中数据均为线上生产数据的备份,在未约定与用户进行验收测试的情况下,不对业务部门开放。 测试环境:包含所有开发代码的环境,用于提供用户进行培训、演示等用途的临时环境,数据为加密及改版过的测试数据。 PRO分支:用于执行ANT脚本进行自动发布的GIT环境,此处的代码必须与生产环境完全保持一致。 UAT分支:用于保证系统的完整性,与PRO分支除数据库配置文件不同外,必须完全一致。 GIT分支:由开发工程师根据需求所建的分支,由开发工程师从本地GIT 资源库推送至公司统一的GIT版本资源库。 测试分支:由项目组自行定义的分支,用于管理测试环境的代码版本库,可根据业务部门的用户需求自行合并GIT分支进行打包整合,以提供给BU部门稳定的可用的测试环境。

git学习笔记

Git 基础配置 1、用户信息 初次安装需要设置以后提交的用户名和邮件地址。设置时指定为—-global,也就是说以后的每一次操作默认都会以该配置生效。当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有--global选项的命令来配置。 $ git config --global https://www.360docs.net/doc/9f18098769.html, "mrling" $ git config --global user.email mrling_work@https://www.360docs.net/doc/9f18098769.html, 2、指定文本编辑器 $ git config --global core.editor emacs 3、查看git配置 $ git config –list 查看所有配置 $ git config 查看指定配置 忽略文件.gitignore Git 基本使用 基本命令 1、git init/git clone 创建本地仓库或者克隆已经存在的仓库,命令格式是git clone [url] $ git init (在指定目录右键打开git bash 运行命令看到.git文件夹出现表示创建本地仓库成功) $ git clone https://https://www.360docs.net/doc/9f18098769.html,/libgit2/libgit2 mylibname(为克隆远程仓库并以mylibname名字报存) 2、git status 检查当前文件状态git status –s(-s简单显示) $ git status

On branch master nothing to commit, working directory clean 所有已跟踪文件在上次提交后都未被更改过。此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则Git 会在这里列出来。最后,该命令还显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离。 git add 可以跟踪一个文件,也可以将已跟踪修改过的文件放到暂存区中 @1命令git add开始跟踪一个文件 $ git add README warning: LF will be replaced by CRLF in README. The file will have its original line endings in your working directory.(正常提示,表示该文件未在远程仓库,不影响commit) @2暂存已修改文件 $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: README Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: README 文件README出现在Changes not staged for commit这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行git add命令。这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。现在让我们运行git add将" README "放到暂存区,然后再看看git status的输出: $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: README git diff $ git diff

Gitlab使用手册

Gitlab使用手册

目录 一Gitlab账号/库申请流程 (3) 1.1 Gitlab账号申请 (3) 1.2 Gitlab库申请 (3) 二Gitlab登录 (3) 2.1 Gitlab 访问路径 (3) 2.2 Gitlab登录页面 (3) 三Git环境配置 (4) 3.1创建公钥 (4) 3.1.1 Linux环境 (4) 3.1.2 Windows环境 (4) 3.1.3 MacOS环境 (7) 3.2 Gitlab SSH页面配置 (7) 四Git操作命令 (8) 4.1 Git本地仓库操作命令 (8) 4.1.1 git init/git clone 初始化库 (8) 4.1.2 git status 查看状态 (9) 4.1.3 git add 添加文件 (9) 4.1.4 git diff 对比文件 (9) 4.1.5 git commit 提交更新 (10) 4.1.6 git rm 移除文件 (10) 4.1.7 git mv 移动文件 (11) 4.1.8 git log 查看提交历史 (11) 4.1.9 git reset 撤销操作 (12) 4.1.10 git branch 创建分支 (13) 4.1.11 git merge 分支合并 (13) 4.1.12 git conflict 解决冲突 (14) 4.1.13 git tag 创建标签 (14) 4.2 Git远程仓库关联操作命令 (15) 4.2.1 git remote 查看远处仓库 (15) 4.2.2 git remote show 查看远程仓库信息 (15) 4.2.3 git remote add 添加远程仓库 (15) 4.2.4 git fetch 从远程仓库抓数据 (16) 4.2.5 git pull 获取最新版本 (16) 4.2.6 git push 推送数据到远程仓库 (16) 4.2.7 git remote rename/rm远程仓库重命名/删除 (17)

git常用命令解说

1. Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。 1)工作目录:用户本地的目录; 2) Index(索引):将工作目录下所有文件(包含子目录)生成快照,存放到一个临时的存储区域,Git 称该区域为索引。 3)仓库:将索引通过commit命令提交至仓库中,每一次提交都意味着版本在进行一次更新。 1.2. 使用Git时的初始化事项 1.2.1. Git初始化配置 1)配置使用git仓库的人员姓名 git config --global https://www.360docs.net/doc/9f18098769.html, "Your Name Comes Here" 2)配置使用git仓库的人员email git config --global user.email you@https://www.360docs.net/doc/9f18098769.html,

1.2.2. Git文档忽略机制 工作目录中有一些文件是不希望接受Git 管理的,譬如程序编译时生成的中间文件等等。Git 提供了文档忽略机制,可以将工作目录中不希望接受Git 管理的文档信息写到同一目录下的.gitignore 文件中。 例如:工作目录下有个zh目录,如果不想把它加入到Git管理中,则执行: echo “zh” > .gitignore git add . 有关gitignore 文件的诸多细节知识可阅读其使用手册:man gitignore 1.3. Git与Repo的比较 Git操作一般对应一个仓库,而Repo操作一般对应一个项目,即一个项目会由若干仓库组成。 例如,在操作整个Recket项目时使用Repo,而操作其中的某个仓库时使用Git。在包含隐藏目录.git的目录下执行git操作。 2. Git help Git help 获取git基本命令 (如果要知道某个特定命令的使用方法,例如:使用Git help clone,来获取git clone 的使用方法) 3. Git本地操作基本命令 3.1. Git init 或者使用git init-db。 创建一个空的Git库。在当前目录中产生一个.git 的子目录。以后,所有的文件变化信息

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的配置与使用

在Windows环境中使用版本管理工具Git 2011-5-6 ?Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码 的管理。在推出后,Git在其它项目中也取得了很大成功,目前很多知名项目都使用了Git。 一、为什么选择Git ?对于流行的软件版本开源管理软件,元老级的CVS、后来新秀的SVN, GIT的优势又在 哪里呢? ? 1. 傻瓜都会的初始化,git init, git commit -a, 就完了。 ? 2. 绝大部分操作在本地完成,只有最终完成的版本才需要向代码管理服务器提交。? 3. 每次提交都会对所有代码创建一个全球唯一的commit id。 ? 4. branch管理容易多了,无论是建立新的,还是切换都一条命令完成。 ? 5. branch之间merge时,不仅代码会merge在一起,check in历史也会保留。 ?其他特点: ?1、更方便的Merge ?2、更方便的管理? ?3、更健壮的系统 ?分布式系统一般情况下总是比单服务端的系统要健壮,因为但服务端一旦服务器挂掉 了整个系统就不能运行了。然而分布式系统通常不会因为一两个节点而受到影响。?4、对网络的依赖性更低 ?5、更少的“仓库污染” ?二. 取得Git, 可以从下面的链接下载得到。 ?- windows系统需要安装msysgit https://www.360docs.net/doc/9f18098769.html,/p/msysgit/ downloads/list ?- Linux需要安装git https://www.360docs.net/doc/9f18098769.html,/download ?- MacOSX需要安装git-osx-installer https://www.360docs.net/doc/9f18098769.html,/p/git-osx- installer/downloads/list?can=3 三、安装msysgit ?双击下载的文件,启动安装过程,都按照默认选项,一路下一步完成安装。 双击git安装程序,即可出现安装窗口

git如何使用

1.如果本地没有代码,运行git clone git@218.244.139.213:projects/gce.git获取远程库上面的代码 2.当拿到代码以后运行git branch查看分支,当前项目下仅仅只有一个master分支,需要创建自己 的分支 3.创建属于自己的分支,运行git branch test ,即是创建了一个test分支,运行git branch 可以看 到当前项目线有两个分支,分别为test 和master 4.切换到test分支,运行命令git checkout test ,即是切换到了test分支,运行git branch 可以看到 test分支变绿,则说明操作正确 5.假如在test分支下面修改了部分文件,运行git status 可以查看更改了哪些文件(文件为红色) 6.如果想要查看具体修改了每个文件的内容,运行git diff ,则可以看到具体的修改内容 7.如果想要查看某个文件修改的内容,只需运行git diff 和所要查看文件的路劲和名称即可 8.跟踪文件添加到本地库,运行git add . ,如果删除了项目中的文件,则可能需要运行git add -A 操作 9.代码提交到本地库,运行git commit -m '描述自己修改的文件或者功能' 10.切换到主分支(master)下,运行git pull origin master ,这句命令的意思是获取新代码 11.把test分支上的代码合并到master分支上,运行命令git merge test即可 12.提交代码到远程库,运行命令git push origin master git使用经验及技巧 GIT 的常规操作 git 配置文件 1.git的配置文件位置 针对所有用户:/etc/gitconfig 针对当前用户:~/.gitconfig 2.查看配置的方法 git config --list 3.修改配置的方法 4.git config --global https://www.360docs.net/doc/9f18098769.html, "wangyubin" (修改的是~ /.gitconfig)

版本控制工具git使用指南

Contents 1前言 (1) 2版本控制的基本概念 (2) 3GIT里的术语定义 (5) 4版本库 (10) 5对象记法 (12) 6合并之fast forward (13) 7混乱之源——index (16) 8工作流程 (19) 9常用命令简介 (21) 10GIT的模块功能 (27)

Figures 1一个简单的版本演化图4 2Fast forward13 3Fast forward的结果14 4--first-parent的作用15 5--first-parent的失效16

1前言 本文面向有一定版本控制经验的人群,对GIT1有基本了解,如果有Subversion2、Mercurial3等使用经验更好。文中从工具的原理和设计乃至实现出发,讲述了GIT的用法,并以个人愚见展示了一些GIT不完美的方面。文章名字本来想戏谑的起名《深入浅出GIT》,意指原理讲的教深(但愿),而具体单个命令用法讲的很浅,因为后者有手册可查,但后来还是觉得有辱没类似名字命名的著作且混乱成语用法的嫌疑,遂作罢。 以前初学GIT不久写过一篇《GIT五分钟教程》,当时以为自己对GIT了解的比较好,但后来在工作中真正的用上GIT后,才发觉还是学习的很肤浅,遇到问题经常觉得无所适从。GIT秉承了UNIX的优良传统——小工具堆叠,“条条道路通罗马”,可惜我常常不知道哪条路是最好走的。经过近一年的实战使用,我仍觉得GIT这玩意还是没能运用自如,但总算有些心得体会,记录成文,希望对GIT用户有所帮助。 GIT的命令行界面我觉得至今还是不能让人满意,我比较喜欢Subversion、Mercurial的命令行界面:一致、简洁。GIT属于那种每个人都想拼命往里面塞功能,每个人都想让GIT具备自己喜欢特性的工具,结果就导致GIT如同Shell编程一般,“一切皆有可能”,虽然是颇有恶趣味,但也常让人厌烦。这绝不会只是我个人的感受,遍观繁多的GIT包装工具就知道了,而且有一些GIT包装工具的做法被GIT吸收,可以说GIT正在成为一个怪物,一个让人又爱又恨的怪物4,它的运行速度非常快——真的是非常快,它的设计思想非常简洁有效。 如果你要纳入版本控制的文件树规模不大5,如果你不关心分布式开发,那么对于版本控制工具,我向你推荐Subversion,集中式版本控制工具的佼佼者,有着 1 http://git.or.cz 2 https://www.360docs.net/doc/9f18098769.html,/ 3 https://www.360docs.net/doc/9f18098769.html,/mercurial 4 我身边这种怪物还有Perl、VIM。 5 大于500MB你就要慎重考虑了,Subversion没有文件复制自动探测,用户如果粗心的用svn add 来替代svn copy,那么会导致版本库迅速膨胀,而且Subversion的工作拷贝实现原理比较低效,类似操作比起GIT慢得多,著名的开源项目FreeBSD从CVS转向Subversion,我是觉得很可惜的。

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