inxtrackup mysql_git ,建立生成 making git-svn work on mac tiger

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

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

1、Linux下git安装配置

一、yum安装

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

二、源码安装

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

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

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

sh /etc/git-completion.bash

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

2、Windows下git使用

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

3、git使用说明

一、添加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

二、建立本地仓储

#建立版本库目录

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

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”

三、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自动完成。

4、gitosis安装和配置

一、gitosis安装

cd /disk/src

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

cd gitosis/

python setup.py install

二、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 异常。

执行成功后查看key是否是已经设置成功,执行下面命令后能够看到咱们提交的id_rsa.pub内容

cat ~/.ssh/authorized_keys

对post-update目录设置权限

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

5、本机操做gitosis-admin项目

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

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

Cloning into ‘gitosis-admin’…

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

Traceback (most recent call last):

File “/usr/local/bin/gitosis-serve”, line 8, in

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

二、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

6、访问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

可能出现的错误:

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

fatal: Could not read from remote repository.

ssh的权限没配置好。

二、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

7、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 强制删除分支

8、参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值