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 等路径)