首页 > 技术文章 > 搭建Git工作环境

Chayeen 2017-11-29 14:35 原文

为什么要做版本控制?

在平时的工作中,经常会遇到写文档的事情,而写文档基本都不会一蹴而就,总是会修修改改很多次,而版本控制能够记录每次修改的版本,能够进行回溯。有很多版本控制工具,但是作为一个程序员,肯定是首推 Git 不解释,由于我暂时还只是一个人自己鼓捣,所以不存在多人协作流程相关的东西,但是我有多台设备,我希望能够在多台设备上都能操作同样的文件,再结合对文件需要进行版本控制,所以下面配置 Git 版本控制环境分需求进行介绍,大家可以根据自己的需求进行配置,环境是在windows系统下。

必需工具

基于需求 命令行 英文界面 中文界面
单人本地 Git Git + TortoiseGit Git + TortoiseGit + LanguagePack
单人远程 Git + ssh-keygen Git + TortoiseGit + PuTTY Git + TortoiseGit + PuTTY+ LanguagePack
多人远程 GitHub + Git + ssh-keygen Git + TortoiseGit + PuTTY GitHub no Chinese version, same as above
  • 单人本地:表示版本库仅被单人在本地一台机器上修改、更新、使用,能够对本地的文件进行版本控制,需求不高的话,这种情况下就可以满足了;
  • 单人远程:仍然是单人,但是可能会有多个设备都想对这个版本库进行操作,如果通过不断的拷贝太过麻烦,可以自己建立一个远程的 Git 服务器,配置此多个设备都可以连接到 Git 服务器获取版本库,先拉后推,相当于在模拟多人协同工作流程了;
  • 多人远程:这里主要指 GitHub 提供的社交化编程,可以把自己的东西上传到 GitHub 上进行开源,可能可以吸收到志同道合的朋友一起来维护一个项目,也是一种展示自己项目实力的方式;
  • 命令行:通过 Git 提供的 bash 来执行相关 Git 命令,可以练习 Git 命令,不过的确上手比较困难一点,当然,大神就尽管用了;
  • 英文界面:可以练习英语表达,可能初步上手会有点点困惑;
  • 中文界面:可能是最适合小白新手入门的配置,推荐;
  • PS:Git其实也提供了界面的 GUI 操作,右键选择 Git GUI Here 个人觉得非常简陋,还不如命令行敲起来舒服,所以如果用界面的话,还是建议用 TortoiseGit 比较好。

工具分类

  1. Git:最基础的工具,支持 Git 的相关命令;
  2. ssh-keygen/PuTTY:生成公私钥对的工具,如果要连接远程 Git 服务器,就需要生成一个公钥和一个私钥,把公钥放到远端的 Git 服务器中,私钥保存在本地,每次从远程克隆或拉取文件到本地和从本地推送文件到远程时都需要使用这一对公私钥作为认证手段,其中PuTTY是专门用来生成 TortoiseGit 可以识别的公私钥对,普通由ssh-keygen生成的公私钥无法被 TortoiseGit 所使用;
  3. TortoiseGit:windows下的界面工具,支持通过各种按钮进行方便的克隆、拉取、推送、对比、分支操作等;
  4. LanguagePack:是 TortoiseGit 的语言包,TortoiseGit 默认为全英文界面,可以安装语言包转换成中文;

配置工作

  • Git:直接下载安装,下一步往下点,最后确定,只需要再配置一下全局的提交人信息即可,随便在某个文件夹下右键选择 Git Bash Here
    • 输入 git config --global user.name "Chayeen"Chayeen修改成你自己的名字,这里是在配置每次 Git 提交文件到版本库时的提交人信息,主要用于多人协作时可以看到到底是谁进行的此次提交,方便找人;
    • git config --global user.email "chayeenhuang@126.com",同样,把chayeenhuang@126.com修改成你自己的邮箱即可;
  • ssh-keygen:主要工作就是生成公私钥对,windows应该自带该软件,安装 Git 后,随便在某个文件夹下右键选择 Git Bash Here
    • 输入cd ~/.ssh:查看是否已经有 id_rsa 和 id_rsa.pub 两个文件,如果有,跳过下一步,没有就下一步;
    • 输入ssh-keygen.exe -t rsa -C "邮箱名"回车,如ssh-keygen.exe -t rsa -C "chayeenhuang@126.com",回车之后要求输入公私钥存储的文件名,如果直接回车,默认文件名为 id_rsa,否则就是你输入的名字,建议直接回车(后续 GitHub 默认读取的就是 id_rsa 名字的私钥);然后会要求输入密码,这个密码其实是在对私钥加密,如果没有输密码,别人如果拿到你的私钥,他在使用的时候就可以直接使用,否则就需要输入密码才行。建议还是输一个简单的密码,只是输了之后,推送到远端 Git 服务器时,有时候就需要输入密码才能用,稍微让自己的操作又麻烦了点;
  • TortoiseGit 和 PuTTY:配置工作同上类似,只是上面是通过命令行,而这里是通过界面按钮,正常安装,下一步往下点,最后确定即可;
    • 安装完成后,在任意文件夹下右键,可看到 TortoiseGit 按钮,点击;
    • Settings 设置,弹出一个框,点击确定;
    • General,点击 Re-run First Start Wizard
    • 弹出一个框,第一页设置语言,默认英文;第二页可以不看,跳过;第三页,浏览选中 Git.exe 的安装路径;第四页,配置 Git 提交的姓名和邮箱, Chayeenchayeenhuang@126.com ;第五页,把默认 OpenSSH 修改成 TortoiseGitPlink;
    • 还是在第五页,点击右侧的 Generate PuTTY key pair ,弹出生成公私钥的界面,点击 Generate,在 该界面框内 移动鼠标,直至进度条满生成公私钥,然后点击 Save public KeySave private key 保存公私钥在某个位置(后面要用);这里可以输入公私钥密码 Key passphrase,之后如果要使用这个公私钥之前就需要使用这个密码才能使用,也可以不输入,这样任何人只要拿到这对公私钥就可以使用,同 ssh-keygen 相似;
    • TortoiseGit 还需要多做一步,在 pageant.exe 中还要进一步配置才行:
      • 找到 PuTTY 的安装路径,找到执行文件 pageant.exe双击运行;
      • 打开桌面底部工作条右边折叠起来的地方(就是一般收qq等软件小图标的地方),找到 pageant 的图表,右键 Add Key,找到上面 PuTTY 生成的私钥添加即可;
  • LanguagePack:更没有什么配置工作,只是在安装它之前必须要先安装 TortoiseGit ,然后再安装它,重启即可。

至此,本地的配置工作告一段落,利用 Git 完成了基本软件环境,然后利用 TortoiseGit 安装了界面环境,利用 ssh-keygen 和 PuTTY 完成了生成公私钥的任务,下面的配置则是在服务器端的操作。

  • Git 服务器搭建及配置
    • 如果是能够联外网的服务器,比如说阿里云这种,直接登录到远端服务器,使用包管理工具 yum intall git,依赖yum包管理工具就可以安装了;
    • 建立专门操作版本控制的用户 git,并禁止它通过shell远程登录:
      • useradd git回车;
      • passwd git,回车输入密码2次,linux不会显示密码,这是正常的,直接输就行了;
      • vim /etc/passwd,修改git用户权限,git:x:1000:1000::/home/git:/usr/bin/git-shell,主要是把/home/git:后面修改成/usr/bin/git-shell即可;
    • 建立远程仓库,之后可以让本地克隆它然后就开始开发了:
      • mkdir 文件夹,在远端新建一个文件夹,作为远端仓库位置,假设就是/home/demo,后续会用到;
      • cd demo,进入文件夹;
      • git init,回车在该文件夹内建立一个版本库;
      • git config --bool core.bare true,把该版本库修改成一个 bare 裸仓库,如果不是裸仓库的话,在本地提交到远端的时候就会出现 远端已经存在工作树,本地工作树提交冲突的问题(深层次的原因不清楚,反正用这个命令就可以解决问题);
      • cd ..回到上层文件夹;
      • chown -R git:git demo修改该文件夹的用户权限,由于之前在服务器上搭建 git 的时候,新建了一个 git 用户并限制了它的 shell 登录(即不能使用 git 账号登录该服务器),所以 sudo 切换到 git 用户下建立仓库不可行,上述文件夹及操作都是在 root 用户下,需要修改成 git 用户,这样本地推送的时候才能够正确推送上去,否则会出现 __git 用户没有对 root 建立的文件夹的写权限__而推送失败。
    • 添加公钥到服务器上:
      • 前面在本地建立了一对公私钥,但是并没有在服务器上进行配置,需要把公钥配置到服务器中,这样,当本地与服务器建立连接的时候,就可以用本地的私钥和服务器的公钥进行匹配了;
      • 登录远程服务器,打开git用户主目录下的.ssh目录,注意这里使用 cd ~/.ssh 是进不去的,原因是登录时是root用户,如果这么进就进入root主目录了,所以只能 cd /home/git/.ssh回车;
      • vim authorized_keys,把公钥复制粘贴到文件里,如果没有这个文件,vim会自动新建一个新的,文件名一定不能错。
  • GitHub配置
    • 申请一个 GitHub 的账号;
    • 添加公钥到 GitHub 的账号中:
      • 道理是一样的,登录 GitHub 后,点击个人头像,选择Setting
      • 点击SSH and GPG keys,点击按钮New SSH key,给公钥取一个名字作为区分,然后把内容贴在下面的内容框中,保存即可;
      • 如果采用命令行,添加 ssh-keygen.exe 生成的那个,GitHub 默认到 ~/.ssh文件下找 id_rsa 文件,一定不能改变位置和名称;
      • 如果要用 TortoiseGit ,必须添加 PuTTY 生成的那个,只要在 pageant 中配置过即可。

至此,所有的配置工作完成,这里简单的梳理一下流程:

  1. 下载软件、安装;
  2. 生成公私钥对;
  3. 把公钥配置到远端;
  4. 开始工作!

工作基本流程

  1. 仅使用Git:——命令行
    • 新建一个文件夹;
    • 进入文件夹,右键,点击 Git Bash Here
    • 输入git init,在这个文件夹下新建了一个本地版本库,此时在文件夹下可以看到一个隐藏文件.git
    • 在该文件夹下,新建一个文件,如 test.txt
    • git add test.txt,添加文件到本地的暂存区,表示想要git跟踪该文件的修改历史;
    • git commit -m "注释",每次提交必须写注释,用来解释这次提交干了什么,便于回溯,表示把该文件提交到本地仓库,如果前面没有配置提交人信息的话,这里就需要补充上,否则不能提交;
    • 至此,仅在本地的版本控制基本就够了,还有更多的 git 命令,如果用到再查就行。
  2. Git + 远端服务器 or GitHub:——命令行
    • 如果要提交到远端,如前所述,需要先在远端建立一个空的版本库克隆到本地进行操作;
    • 确定远端要克隆的文件夹路径后,在本地进入一个父文件夹,右键,点击 Git Bash Here输入 git clone git@1.1.1.1:/home/demo 远程仓库的链接,回车即可,如果是 GitHub 命令IP地址的地方应该是 github.com ,另外,如果公私钥的配置有点问题,可能会需要输入该 git 用户远端服务器密码;
    • git add 文件名,文件名连续写多个,用空格分隔即可,添加文件到本地的工作空间,表示想要跟踪该文件的修改历史;
    • git commit -m "注释",每次提交必须写注释,用来解释这次提交干了什么,便于回溯,表示把该文件提交到本地仓库;
    • git push,推送,表示把本地仓库里面的东西提交到远程仓库中;
    • git pull,拉取,记住四个字 先拉后推,每次推送到远程仓库之前,或者说,每次工作之前,都需要先从远端拉取内容,然后再进行开发,这个时候可能会遇到一些冲突的情况,解决冲突就是稍微麻烦一点的事情了,命令行暂时不会,开始使用界面解决冲突,比较好看。
  3. 使用 TortoiseGit :—— windows 界面
    • 克隆:
      • 找一个没有进行版本控制的文件夹,直接右键选择克隆 Git Clone
      • 在弹出来的框中,填写URLDirectory,分别表示远端的版本库链接和本地的版本库名称,和前面命令行一样,URL填写如git@github.com:Chayeen/chayeen.github.io.git,名称默认会是chayeen.github.io,点击OK即可;
    • 提交文件到本地仓库:
      • 进入一个进行版本控制的文件,右键选择提交到主分支Git commit -> master
      • 在弹出来的框中,选择需要进行版本控制的文件,并设置提交人的信息,确定提交即可;
      • 显示成功提交,则文件作为一个版本存到了本地的版本仓库;
    • 推送文件到远端仓库:
      • 上面的框别关,确定的左侧,有一个推送push按钮,点击之后,推送文件到了远端;
      • 显示成功推送,则文件作为一个版本存到了远程的版本仓库。

2017-11-27 20:34:24
如果后续有添加再说。

欢迎转载本博客文章,转载请注明出处,十分感谢。

推荐阅读