Git – 创建操作
在本章中,我们将看到如何创建一个远程 Git 仓库;从现在开始,我们将把它称为 Git 服务器。我们需要一个 Git 服务器来实现团队协作。
创建新用户
# add new group
[root@CentOS ~]# groupadd dev
# add new user
[root@CentOS ~]# useradd -G devs -d /home/gituser -m -s /bin/bash gituser
# change password
[root@CentOS ~]# passwd gituser
上述命令将产生以下结果。
Changing password for user gituser.
New password:
Retype new password:
passwd: all authentication token updated successfully.
创建一个裸仓库
让我们使用 init 命令和 --bare 选项来初始化一个新的版本库。它初始化的版本库没有工作目录。按照惯例,裸版本库必须命名为 .git 。
[gituser@CentOS ~]pwd
/home/gituser
[gituser@CentOS ~] mkdir project.git
[gituser@CentOS ~]cd project.git/
[gituser@CentOS project.git] ls
[gituser@CentOS project.git]git --bare init
Initialized empty Git repository in /home/gituser-m/project.git/
[gituser@CentOS project.git] ls
branches config description HEAD hooks info objects refs
生成公共/私人 RSA 密钥对
让我们来看看配置 Git 服务器的过程, ssh-keygen 工具会生成公/私 RSA 密钥对,我们将用它来进行用户认证。
打开一个终端,输入以下命令,每个输入都按回车键。成功完成后,它将在主目录下创建一个 .ssh 目录。
tom@CentOS ~]pwd
/home/tom
[tom@CentOS ~] ssh-keygen
上述命令将产生以下结果。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tom/.ssh/id_rsa): **Press Enter Only**
Created directory '/home/tom/.ssh'.
Enter passphrase (empty for no passphrase): **--------------- > Press Enter Only**
Enter same passphrase again: **------------------------------ > Press Enter Only**
Your identification has been saved in /home/tom/.ssh/id_rsa.
Your public key has been saved in /home/tom/.ssh/id_rsa.pub.
The key fingerprint is:
df:93:8c:a1:b8:b7:67:69:3a:1f:65:e8:0e:e9:25:a1 tom@CentOS
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
|
.
|
| Soo |
| o*B. |
| E = *.= |
| oo==. . |
| ..+Oo
|
+-----------------+
ssh-keygen 生成了两个密钥,第一个是私有的(即id_rsa),第二个是公开的(即id_rsa.pub)。
注意: 永远不要与他人分享你的PRIVATE KEY。
向authorized_keys添加密钥
假设有两个开发人员在一个项目上工作,即Tom和Jerry。两个用户都生成了公钥。让我们看看如何使用这些密钥进行认证。
Tom通过使用 ssh-copy-id 命令将他的公钥添加到服务器上,如下图所示
[tom@CentOS ~]pwd
/home/tom
[tom@CentOS ~] ssh-copy-id -i ~/.ssh/id_rsa.pub gituser@git.server.com
上述命令将产生以下结果。
gituser@git.server.com's password:
Now try logging into the machine, with "ssh 'gituser@git.server.com'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
同样,Jerry通过使用ssh-copy-id命令将他的公钥添加到服务器上。
[jerry@CentOS ~]pwd
/home/jerry
[jerry@CentOS ~] ssh-copy-id -i ~/.ssh/id_rsa gituser@git.server.com
上述命令将产生以下结果。
gituser@git.server.com's password:
Now try logging into the machine, with "ssh 'gituser@git.server.com'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
推送更改到版本库
我们在服务器上创建了一个裸版本库,并允许两个用户访问。从现在开始,Tom和Jerry可以通过添加仓库为远程来推送他们的修改。
Git init 命令每次从 .git/config 文件中读取配置时都会创建 .git 目录来存储仓库的元数据。
汤姆创建了一个新目录,添加了README文件,并将他的改动作为初始提交。提交后,他通过运行 git log 命令来验证提交信息。
[tom@CentOS ~]pwd
/home/tom
[tom@CentOS ~] mkdir tom_repo
[tom@CentOS ~]cd tom_repo/
[tom@CentOS tom_repo] git init
Initialized empty Git repository in /home/tom/tom_repo/.git/
[tom@CentOS tom_repo]echo 'TODO: Add contents for README'>README
[tom@CentOS tom_repo] git status -s
?? README
[tom@CentOS tom_repo]git add .
[tom@CentOS tom_repo] git status -s
A README
[tom@CentOS tom_repo]$ git commit -m 'Initial commit'
上述命令将产生以下结果。
[master (root-commit) 19ae206] Initial commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README
汤姆通过执行git log命令检查日志信息。
[tom@CentOS tom_repo]$ git log
上述命令将产生以下结果。
commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <tom@tutorialspoint.com>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit
汤姆把他的修改提交到本地仓库。现在,是时候推送修改到远程版本库了。但在此之前,我们必须把版本库添加为远程,这是一个一次性的操作。在这之后,他就可以安全地推送修改到远程仓库了。
注意 - 默认情况下,Git 只推送到匹配的分支:对于每一个存在于本地的分支,如果远端已经存在同名的分支,那么远端也会被更新。在我们的教程中,每次推送修改到 原生主干 分支,请根据你的要求使用合适的分支名称。
[tom@CentOS tom_repo]git remote add origin gituser@git.server.com:project.git
[tom@CentOS tom_repo] git push origin master
上述命令将产生以下结果。
Counting objects: 3, done.
Writing objects: 100% (3/3), 242 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gituser@git.server.com:project.git
* [new branch]
master −> master
现在,这些变化被成功地提交到了远程仓库。