Git 服务器已经搭建完成,并且本机与服务器之间通信正常,下面模拟 A 用户操作 Git 项目。

克隆项目到本地:

Git

Administrator@XP-201210141900 /e/git1

$ git clone gituser@172.16.10.3:/home/gituser/git/git-test.git

Cloning into 'git-test.git'...

gituser@172.16.10.3's password: ---要求输入 gituser 密码

warning: You appear to have cloned an empty repository.

Checking connectivity... done.

Administrator@XP-201210141900 /e/git1

$ ls

git-test.git

Administrator@XP-201210141900 /e/git1

$ cd git-test.git/

Git 的常用命令我们已经比较熟悉了,git clone 可以将项目克隆到本地,有所不同的是这次我们克

隆的是虚拟主机(172.16.10.3)下的(/home/gituser/git/git-test.git)目录下的项目,注意我们是通过 gituser 用户访问的,所以需要输入 gituser 用户的密码(git)。

提交项目

我们在 git/git-test.git 目录下创建 hello.py 文件:

Git

Administrator@XP-201210141900 /e/git1/git-test (master)

$ git status

On branch master

Initial commit

Untracked files:

(use "git add <file>..." to include in what will be committed)

hello.py

nothing added to commit but untracked files present (use "git add" to track)

Administrator@XP-201210141900 /e/git1/git-test (master)

$ git add .

Administrator@XP-201210141900 /e/git1/git-test (master)

$ git commit -m 'hello'

[master (root-commit) 4c2337b] hello

1 file changed, 1 insertion(+)

create mode 100644 hello.py

Administrator@XP-201210141900 /e/git1/git-test (master)

$ git push origin master

gituser@172.16.10.3's password: --要求输入 gituser 密码

Counting objects: 3, done.

Writing objects: 100% (3/3), 222 bytes | 0 bytes/s, done.

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

To gituser@172.16.10.3:/home/gituser/git/git-test

* [new branch] master -> master

B 用户访问 Git 服务器

A 用户将 Git 服务器上的空项目克隆到本地,并且创建了项目进行了提交。接下来由 B 用户对项目进

行操作。

克隆项目

Git

Administrator@XP-201210141900 /e/git2

$ git clone gituser@172.16.10.3:/home/gituser/git/git-test

Cloning into 'git-test'...

gituser@172.16.10.3's password:

remote: Counting objects: 3, done.

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

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

Checking connectivity... done.

Administrator@XP-201210141900 /e/git2

$ ls

git-test

Administrator@XP-201210141900 /e/git2

$ cd git-test/

Administrator@XP-201210141900 /e/git2/git-test (master)

$ ls

hello.py

B 用户克隆项目的时候发现多了一个 hello.py 文件,是 A 由用户创建并提交的文件。

提交项目

B 用户在 git2/git-test.git 目录下又创建了一个 git.py 文件,然后向 git server 项目提交:

Git

Administrator@XP-201210141900 /e/git2/git-test (master)

$ git add .

Administrator@XP-201210141900 /e/git2/git-test (master)

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file: git.py

Administrator@XP-201210141900 /e/git2/git-test (master)

$ git commit -m 'add git file'

[master f29b6df] add git file

1 file changed, 1 insertion(+)

create mode 100644 git.py

Administrator@XP-201210141900 /e/git2/git-test (master)

$ git push origin master

gituser@172.16.10.3's password: --要求输入 gituser 密码

Counting objects: 4, done.

Delta compression using up to 8 threads.

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

Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.

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

To gituser@172.16.10.3:/home/gituser/git/git-test

4c2337b..f29b6df master -> master

A A 用户拉取( pull )项目

最后,我们再切换回 A 用户,向 git 服务器拉取更新后的项目。

Git

Administrator@XP-201210141900 /e/git1/git-test (master)

$ git pull origin master

gituser@172.16.10.3's password: --输入 gituser 用户密码

remote: Counting objects: 4, done.

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

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

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

From 172.16.10.3:/home/gituser/git/git-test

* branch master -> FETCH_HEAD

4c2337b..f29b6df master -> origin/master

Updating 4c2337b..f29b6df

Fast-forward

git.py | 1 +

1 file changed, 1 insertion(+)

create mode 100644 git.py

Administrator@XP-201210141900 /e/git1/git-test (master)

$ ls

git.py hello.py

通过 pull 命令来拉取 B 用户所提交的 git.py 文件。最终,我们达到多人协作开发的目的。

需要强调的是我们的 A、B 两个用户与 git server 保持通信所使用的是 SSH 协议,用户为 gituser ,

每次在提交和拉取的时候都需要输入 gituser 用户密码。

如果读者想实现更强大的 git 管理可以使用:

 使用 gitosis 来管理(gitosis 可以设定到 "谁" 可以存取此专案)

 使用 gitolite 来管理(gitolite 可以设定 "谁" 可以存取此专案, 而且, 可以设定只能存取哪个

branch 等路径)