一、配置环境
1、服务器:阿里云CentOS 7.2(64位) + Git (version 1.8.3.1)
2、客户端:Windows 10 Pro(64位) + Git(version 2.11.0.windows.1)
3、服务器连接软件:Xshell 5
、安装git
Linux作为服务器端系统,Windows作为客户端系统,分别安装Git
服务器端
[admin@ceontOS ~]$ su root #切换到root用户名
Password: #输入root用户的密码
[root@ceontOS ~]# yum install -y git #执行该命令进行Git安装
安装完后,查看Git版本
[root@ceontOS ~]# git --version
git version 1.8.3.1
客户端:
下载 Git for Windows,地址:https://git-for-windows.github.io/
安装完之后,可以使用 Git Bash 作为命令行客户端。
安装完之后,查看 Git 版本
$ git --version
git version 2.11.0.windows.1
Git客户端安装具体可参考:Git安装及SSH Key管理之Windows篇
2、服务器端创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码
[root@ceontOS ~]# cd /home #进入/home/目录
[root@ceontOS home]# id git #查看git用户是否存在
id: git: no such user #提示git用户不存在
[root@ceontOS home]# useradd git #创建git用户
[root@ceontOS home]# passwd git #为git用户创建密码
Changing password for user git.
New password: #设置密码
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: #确认密码
passwd: all authentication tokens updated successfully.
3、服务器端创建 Git 仓库
设置 /home/git/repository/gittest.git 为 Git 仓库
[root@ceontOS home]# mkdir -p ./git/repository/gittest.git #在git用户目录下创建仓库目录repositroy,并且创建gittest.git项目测试目录
[root@ceontOS home]# ls #查看/home/目录下有哪些用户目录
admin git
[root@ceontOS home]# cd git #进入git用户目录
[root@ceontOS git]# ls #查看git用户目录下有哪些目录/文件
repository
[root@ceontOS git]# cd repository/ #进入repository仓库目录
[root@ceontOS repository]# ls #查看仓库目录下的项目目录
gittest.git
[root@ceontOS repository]# git init --bare ./gittest.git #这步很重要,初始化项目测试目录
Initialized empty Git repository in /home/git/repository/gittest.git/
然后把 Git 仓库的 owner 修改为 git
[root@ceontOS git]# ll #查看gittest.git项目文件夹的拥有者
total 4
drwxr-xr-x 3 root root 4096 Jan 13 13:08 repository #拥有者是root用户名
[root@ceontOS git]# chown -R git:git repository #将拥有者改为git用户
[root@ceontOS git]# ll #再次查看gittest.git项目文件夹的拥有者
total 4
drwxr-xr-x 3 git git 4096 Jan 13 13:08 repository #拥有者是git用户
* **4、客户端 clone 远程仓库**
先在本地Windows系统上创建一个存放git项目的文件夹,例如我的设置在:【D:\gittest】
此处通过Git Bash来创建的,当然也可以手动创建该目录,然后进入该目录,启动Git Bash
JayYang@YJ-PC MINGW64 ~/Desktop #在桌面打开的git bash
$ cd /d #进入D盘
JayYang@YJ-PC MINGW64 /d
$ mkdir gittest #创建gittest文件夹
JayYang@YJ-PC MINGW64 /d
$ cd gittest/ #进入gittest文件夹
JayYang@YJ-PC MINGW64 /d/gittest #显示当前在D:\gittest路径下
$ git clone git@服务器公网IP地址:/home/git/repository/gittest.git #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径
![](http://upload-images.jianshu.io/upload_images/2267589-7bedba534bdc9f04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
当第一次连接到目标 Git 服务器时会得到一个提示:
The authenticity of host '118.178.142.77 (118.178.142.77)' can't be established.
ECDSA key fingerprint is SHA256:JwC9NxLIjBGqtLC2NUk8MulSc3XH3mM5AWMcFz0a5/8.
Are you sure you want to continue connecting (yes/no)? yes
选择 yes:
Warning: Permanently added '118.178.142.77' (ECDSA) to the list of known hosts.
此时 C:\Users\用户名\.ssh 下会多出一个文件 known_hosts,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。
【说明】如果你的服务器没有配置SSH连接,那么按照正常情况会让你输入git用户的密码,输入正确后就能进行项目克隆了。
![](http://upload-images.jianshu.io/upload_images/2267589-776f44a088bba653.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果不采用 SSH 公钥来进行验证,则每次都要输入密码,很麻烦,下面就来配置SSH公钥验证的方式来clone项目
以上命令安装好了就可以正常使用————下面命令可以自己选择配置
* **5、客户端创建 SSH 公钥和私钥**
ssh-keygen -t rsa -C "[email protected]"
此处我是管理了多个ssh_key,所以这边给公私钥起了个名字:id_rsa_git,生成后需要进行**ssh-add**操作,如何管理多个ssh_key可以参考:[Git安装及SSH Key管理之Windows篇](http://www.jianshu.com/p/a3b4f61d4747)
![](http://upload-images.jianshu.io/upload_images/2267589-f781abf1bff6be8f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub
id_rsa_git 是私钥
id_rsa_git.pub 是公钥
![](http://upload-images.jianshu.io/upload_images/2267589-a5b6810e27a15c93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* **6、服务器端修改配置文件,打开 RSA 认证**
进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:
[root@ceontOS ~]# sudo vi /etc/ssh/sshd_config #root用户下,编辑/etc/ssh/sshd_config文件
按如下设置这三个配置,如果注释掉了,则去掉前面的#号
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存并重启 sshd 服务:
sudo service sshd restart #重启sshd服务
由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys
在 /home/git/ 下创建目录 .ssh
[root@ceontOS ~]# cd /home/git
[root@ceontOS git]# pwd
/home/git
[root@ceontOS git]# mkdir .ssh
[root@ceontOS git]# ls -a
. .. .bash_logout .bash_profile .bashrc repository .ssh
然后把 .ssh 文件夹的 owner 修改为 git
[root@ceontOS git]# chown -R git:git .ssh
[root@ceontOS git]# ll -a | grep .ssh
drwxr-xr-x 2 git git 4096 Jan 13 14:54 .ssh
* **7、将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件**
回到客户端Git Bash 下,导入文件:
$ ssh git@服务器公网IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa_git.pub
![](http://upload-images.jianshu.io/upload_images/2267589-c0e6f9dc9b76225f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:
[root@ceontOS ~]# cd /home/git/.ssh/
[root@ceontOS .ssh]# ll
total 4
-rw-rw-r-- 1 git git 398 Jan 13 15:03 authorized_keys
[root@ceontOS .ssh]# cat authorized_keys #查看客户端生成的公钥
**重要:**
**修改 .ssh 目录的权限为 700**
**修改 .ssh/authorized_keys 文件的权限为 600**
[root@ceontOS git]# chmod 700 .ssh
[root@ceontOS git]# cd .ssh/
[root@ceontOS .ssh]# chmod 600 authorized_keys
* **8、客户端再次 clone 远程仓库**
git clone [email protected]:/home/git/repository/gittest.git
![](http://upload-images.jianshu.io/upload_images/2267589-909ce2867f46f28c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* **9、禁止 git 用户 ssh 登录服务器**
之前在服务器端创建的 git 用户不允许 ssh 登录服务器
编辑 /etc/passwd
[admin@ceontOS ~]$ su root #切换到root用户
Password:
[root@ceontOS admin]# sudo vi /etc/passwd #编辑/etc/passwd文件
找到:
git:x:1001:1001::/home/git:/bin/bash
修改为:
git:x:1001:1001::/home/git:/bin/git-shell
此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。
git常用技巧(详细篇)
一、把文件添加到版本库中。
首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。
下面先看下demo如下演示:
我在版本库testgit目录下新建一个记事本文件 readme.txt 内容如下:11111111
第一步:使用命令 git add readme.txt添加到暂存区里面去。如下:
如果和上面一样,没有任何提示,说明已经添加成功了。
第二步:用命令 git commit -m "文件备注"告诉Git,把文件提交到仓库。
现在我们已经提交了一个readme.txt文件了,提交时候必须写备注,我们下面可以通过命令git status来查看是否还有文件未提交,如下:
说明没有任何文件未提交,但是我现在继续来改下readme.txt内容,比如我在下面添加一行2222222222内容,继续使用git status来查看下结果,如下:
上面的命令告诉我们 readme.txt文件已被修改,但是未被提交的修改。
接下来我想看下readme.txt文件到底改了什么内容,如何查看呢?可以使用如下命令:git diff readme.txt 如下:
如上,我们已经学会了修改文件,现在我继续对readme.txt文件进行修改,再增加一行
内容为33333333333333.继续执行命令如下:
现在我已经对readme.txt文件做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 git log 演示如下所示:
git log命令显示从最近到最远的显示日志,我们可以看到最近三次提交,最近的一次是,增加内容为333333.上一次是添加内容222222,第一次默认是 111111.如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline 演示如下:
现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令,第一种是:git reset —hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset —hard HEAD~100 即可。未回退之前的readme.txt内容如下:
如果想回退到上一个版本的命令如下操作:
再来查看下 readme.txt内容如下:通过命令cat readme.txt查看
可以看到,内容已经回退到上一个版本了。我们可以继续使用git log 来查看下历史记录信息!
由于ShowDoc每天只能上传十张图片。想学习更多操作请复制链接粘贴到浏览器查看
https://blog.csdn.net/youzhouliu/article/details/78952453
总结GIT常用的命令
添加命令:
git add . 全部提交
git commit -m “备注注释”;
git status 查看状态红变绿
git push -u origin master 提交到服务器
在服务器查看提交的日志文件 git log