git 创建操作

  • 创建操作

    在本章中,我们将了解如何创建远程Git存储库。从现在开始,我们将其称为Git Server。我们需要一个Git服务器来允许团队协作。
  • 建立新使用者

    
    # add new group
    [root@CentOS ~]# groupadd dev
    
    # add new user
    [root@CentOS ~]# useradd -G dev -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密钥对,并将其用于用户身份验证。打开一个终端并输入以下命令,然后为每个输入按Enter。成功完成后,它将在用户目录(这里在另外一台客户机上生成)中创建一个.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): 按回车即可
    Created directory '/home/tom/.ssh'.
    Enter passphrase (empty for no passphrase): ---------------> 按回车即可
    Enter same passphrase again: ------------------------------> 按回车即可
    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)。
    注意:切勿与他人共享您的私钥。
  • 将密钥添加到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.
    
    这时候在git仓库服务器上的gituser用户目录下的.ssh中的authorized_keys文件中已经追加了刚刚添加的两个用户的公钥
  • 将更改推送到存储库

    我们在服务器上创建了一个裸仓库,并允许两个用户访问。从现在开始,Tom和Jerry可以通过将其更改添加为存储库来将其更改推送到存储库。Git init命令每次从.git/config文件中读取配置时,都会创建.git目录来存储有关存储库的元数据。Tom创建一个新目录,添加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
    
    Tom通过执行git log命令检查日志消息。
    
    [tom@CentOS tom_repo]$ git log
    
    上面的命令将产生以下结果。
    
    commit 19ae20683fc460db7d127cf201a1429523b0e319
    Author: Tom Cat <tom@jc2182.com>
    Date: Wed Sep 11 07:32:56 2013 +0530
    
    Initial commit
    
    Tom将更改提交到本地存储库。现在,是时候将更改推送到远程存储库了。但是在此之前,我们必须将存储库添加为远程存储库,这是一次性操作。此后,他可以安全地将更改推送到远程存储库。
    – 默认情况下,Git仅推送到匹配的分支:对于本地存在的每个分支,如果已经存在相同名称的分支,则将更新远程端。在我们的教程中,每次我们将更改推送到Origin master分支时,请根据您的要求使用适当的分支名称。
    
    [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
    
    现在,更改已成功提交到远程存储库。