安装git
首先需要在服务器上安装git环境,以centos为例:
yum install git
然后添加一个用户,就叫git吧。
adduser git
passwd git
input your password...
然后在终端输入 git
添加信任关系
linux默认是不信任任何机器的,通过ssh登录其他主机都需要输入密码,建立信任关系的过程就是一台主机生成公钥,把公钥放到其他主机上,然后这个主机通过ssh登录其他机器就不需要输入密码了。
在用户家目录下默认是没有.ssh目录的:
cd /home/git
ls -al
因为没有生成过公钥,生成公钥和私钥的命令为:(-t 的意思是加密算法为rsa)
ssh-keygen -t rsa
ls -al
一路回车,然后在用户的家目录下能看到 .ssh 目录。收集所有需要登录的用户的公钥,就是该用户的/.ssh/id_rsa.pub文件,把所有公钥导入/home/git/.ssh/authorized_keys文件。然后就可以通过ssh username@ip 直接远程登录其他机器,而不需要使用密码了。由于git跟远程仓库的交互主要依靠http和ssh,这个步骤的目的就是让远程提交的时候不需要每次都输入密码。
问题是window下如何生成这个公钥呢?
通过windows下的git工具就可以生成公钥了,而且生成的公钥也是在当前用户的家目录。
scp C:/Users/semptian/.ssh/id_rsa.pub git@47.95.11.33:/tmp
ssh git@47.95.11.33 "cat /tmp/id_rsa.pub >> /home/git/.ssh/authorized_keys"
scp是远程复制的命令,把本地的公钥文件远程复制到/tmp下;然后登录服务器,把/tmp下的文件添加到git用户的authorized_keys中。
本地通过ssh命令登录到远程服务器不要密码,算是信任关系已经建立。
初始化git仓库
先选定一个目录作为远程git仓库。
su root
mkdir /srv/repository/sample
cd /srv/repository/sample
git init --bare sample.git
ls -al
把远程仓库于本地之间的交互
在本地的一个目录下运行git Bash
git clone git@47.95.11.33:/srv/repository/sample/sample.git
本地代码的提交:
git init #初始化本地文件夹为git仓库
git add . #把当前文件夹中的所有文件添加到git仓库,也可以添加某一个文件。
git commit -m "commit" #提交
git remote add origin git@47.95.11.33:/srv/repository/sample/sample.git
#与github仓库建立远程连接
git push -u origin master #把本地的项目推送到github远程仓库
1、git remote add origin git@47.95.11.33:/srv/repository/sample/sample.git
#与远程仓库建立远程连接
2、git push -u origin master
#把本地的项目推送到github远程仓库
1、2两个命令等价于以下这个命令:
git push -u origin master git@47.95.11.33:/srv/repository/sample/sample.git
如果当前分支与多个主机存在追踪关系,可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push,然后下次就提交之后就可以直接 git push 了。
#与远程仓库同步
git pull --rebase origin master
遇到的一些错误
在提交的时候报错:
$ git commit -m "test_02"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'semptian@DESKTOP-QVJGTA9.(none)')
提示中git config --global 是全局的配置,单独为项目配置的方法(全局和单独配置都存在的时候会默认使用项目单独配置的):
1.打开项目所在目录,找到隐藏的.git文件夹。注意这个文件夹是隐藏的,显示隐藏出来就行。
2.打开文件夹里的config文件,推荐用nodepad++打开。
3.添加这三行到文件:
[user]
name = XXX(自己的名称)
email = XXXX(邮箱)
输入 git log 报错:
fatal: Not a git repository (or any of the parent directories): .git
需要在git仓库的根目录中使用git命令。
push到远程的时候报错:
fatal: remote part of refspec is not a valid name in
git@47.95.11.33:/srv/repository/sample/sample.git
可能这是第二次提交,添加了远程仓库之后可以直接 git push 。