标签归档:git

Ubuntu下架设git服务器

服务器上安装git,ssh登录进入服务器之后,使用命令:

$sudo apt-get install git

创建一个git用户,用来运行git服务:

$sudo adduser git

这中间可能需要输入密码,可以输入一个复杂的密码,自己记不住也可以,因为我们一般都用证书登录比较方便.这样就不需要输入密码了.

创建证书登录
可能很多人的服务器的ssh登录方式就已经是证书登录的了,可以参考之前的文章:ssh 免密登录 linux服务器,如果你已经实现了ssh证书登录,其实你只需要把 authorized_keys文件直接复制到 /home/git/.ssh/下面就可以了.

然后必须要设置一下 authorized_keys的权限,因为你可能使用的超级用户,那么git很可能没有权限读取这个文件:

$sudo chown git:git /home/git/.ssh/authorized_keys

初始化Git仓库:
先选定或者创建一个目录作为git仓库,比如我们创建一个 /home/git/cangku.git的目录,cd进入这个目录,使用如下命令:

$sudo git init --bare sample.git

这样就创建好了一个裸仓库,裸仓库没有工作区.

设置仓库目录的权限

$sudo chown -R git:git cangku.git

禁用shell登录

编辑 /etc/passwd
找到: git:x:1001:1001:,,,:/home/git:/bin/bash
改为: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

之后我们就可以在客户端电脑上正常的使用git了,比如如上创建的裸仓库,克隆的命令就是:

$git clone git@server:cangku.git

git 一条命令搞定新建删除和修改

在项目中进行过多次的修改、新建、删除文件之后,我们要一个一个的进行 git add、git rm会非常的麻烦,这时候我们可以直接一条命令搞定

git add -A .

注意别忘记最后变的英文句号,和-A之间有空格。这样所有在项目中的修改、新建(未跟踪的)、删除都会被标记了,然后你可以使用 git status看看工作区是不是干净的,之后放心了吧?

git commit -m ''
git push ....

完成。

根据远程分支创建本地分支

First, clone a remote Git repository and cd into it:

$ git clone git://example.com/myproject
$ cd myproject

Next, look at the local branches in your repository:

$ git branch
* master

But there are other branches hiding in your repository! You can see these using the -a flag:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

If you just want to take a quick peek at an upstream branch, you can check it out directly:

$ git checkout origin/experimental

But if you want to work on that branch, you’ll need to create a local tracking branch:

$ git checkout -b experimental origin/experimental

Now, if you look at your local branches, this is what you’ll see:

$ git branch
* experimental
  master

You can actually track more than one remote repository using git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

At this point, things are getting pretty crazy, so run gitk to see what’s going on:

$ gitk --all &

以上来自:http://stackoverflow.com/questions/67699/how-do-i-clone-all-remote-branches-with-git

其实我发现,如果直接 git checkout experimental也可以,而不需要 git checkout experimental origin/experimental,git可自动识别,如下演示:

$ git checkout dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
切换到一个新分支 'dev'
$ git checkout -b feature-base origin/feature-base 
分支 feature-base 设置为跟踪来自 origin 的远程分支 feature-base。
切换到一个新分支 'feature-base'

git学习笔记

昨天晚上看了廖雪峰写的git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000,写的太好了,一直看到凌晨1点,下面总结一下我感触比较深的地方。

首先,Linus大神确实了不起,只用了两周就写出了git,而且秒杀之前的 SVN,之前我也确实用过SVN,但由于都是一个人做项目,只是用来做代码的同步工具。

言归正传,git 是分布式的,服务器里面的库和本地的没有本质的区别,唯一的区别服务器是长时间开机并且固定ip的,这样只是为了方便交换。所以,如果你想自己搭建 git服务器的话很简单。

git 工作区和版本库里面的暂存区相关概念理解很重要,这样一些常见命令也很容易理解记忆。

关于分支
以前使用 SVN的时候没有用过分支,就是不断的提交。看过教程,发现分支很好用。默认的主分支为 master,在开始项目的时候,可以建立一个 dev分支,平常就在 dev上做开发工作,如果到了一个可用的版本,可以合并到 master,这样别人clone出来的代码就总是可用的。