Git使用方法
Git使用概述
Git的基本结构分为三个区:工作区、暂存区、Git仓库。Git使用的基本流程:
- 创建本地仓库,用
git init
创建本地仓库,用于保存代码和文档。 - 代码入库,Git代码入库分两步,首先用
git add
将工作区代码提交到暂存区,然后用git commit -m "备注"
将在暂存区的代码提交到本地仓库。 - 创建远程仓库,远程仓库的创建和本地仓库的方式一样,通常远程仓库不进行代码的开发,所以可以不用保留工作区,用
git init --bare
创建一个裸仓库。 - 代码推送到远程仓库,用git push将本地仓库代码推送到远程仓库。
- 远程仓库代码下载到本地,用
git pull
将远程仓库代码下载到本地,git pull
是git fetch
和git merge
两个操作的组合。
Git安装
- 下载Git的安装包,下载地址:https://git-scm.com/downloads,本文此时下载的版本是git-2.42.0。
- Linux下安装,将Linux版本安装包git-2.42.0.tar.gz,解压缩到当前目录git-2.42.0,在文件夹git-2.42.0下打开终端,依次执行命令:
./configure
make -j4
make install
查看Git版本,测试是否安装成功,如果成功则返回Git版本号
git -v / git --version
- Windows下的安装,直接下载安装包Git-2.42.0.2-64-bit.exe,安装运行,安装成功后会在Windows下安装一个git-bash.exe,后续的在Windows下的Git操作都通过git-bash.exe输入命令。
Git本地仓库
- 新建一个工作目录
mkdir /test_repo
cd /test_repo
-
创建本地Git仓库,创建仓库可以用
git init
创建一个带有工作区的仓库,git仓库文件放/test_repo/.git目录下,用git init --bare
创建裸仓库,没有工作区,git仓库文件直接放在/tese_repo目录下。 -
在/test_repo目录下新建Qt代码工程,编写代码
-
代码提交,可以在Qt中利用Git插件进行提交,也可以在/test_repo目录下打开终端用命令行提交,命令行提交方式:
git add *.c/cpp/.h/.txt 将需要提交的文件添加到缓存区,这里可以添加多个文件,也可以用 git add .添加全部文件 git commit -m "提交时的说明" 将缓存区文件提交到本地仓库
-
在代码首次commit的时候需要配置email和username,为了方便可以配置一个全局的email和username,让所有的仓库公用:
git config --global user.name "test" 设置用户名 git config --global user.email "test@test.com" 设置电子邮箱 git config user.name 查看用户名 git config user.email 查看电子邮箱
Git远程仓库
Linux作为服务器端
远程仓库和本地仓库构建过程一样,只是如果在远程只是存储工程而不需要编辑时则将远程仓库建为裸仓库。
- 创建保存目录
mkdir /GitRepos/repo.git
- 裸仓库构建
git init --bare
- 普通仓库构建
git init
在服务器端的远程仓库默认为--bare
,如果不是--bare
,则需要修改配置文件,否则不能从本地向远端仓库push工程
cd ./.git
vim config 添加配置项
[receive]
denyCurrentBranch = ignore
Windows作为服务器端
1)安装Git for windows(Git-2.42.0.2-64-bit.exe),本文安装在D盘
配置环境变量,在Path中添加D:\Git\bin;D:\Git\cmd;D:\Git\mingw64\bin;D:\Git\mingw64\libexec\git-core;
2)安装OpenSSH
将OpenSSH-Win64解压并复制到C:\Program Files\OpenSSH目录下
用管理员权限打开命令行打开cmd命令,依次执行:
cd "C:\Program Files\OpenSSH" (路径要加双引号,否则会把C:\Programs当路径Files当参数)
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 (使OpenSSH可以当服务端用,安装sshd服务)
sc config sshd start=auto (设置sshd服务开机自动启动)
net start sshd (启动sshd服务)
将OpenSSH添加到环境变量中,在Path中添加C:\Program Files\OpenSSH
3)修改注册表项,将OpenSSH的默认shell改为Git的bash.exe,默认远程连接Windows的时候打开的是Windows自带的cmd,而cmd不能解析和执行Git命令,因此需要修改默认的shell。
打开cmd,运行regedit(打开运行,输入regedit.msc),打开注册表;选择HKEY_LOCAL_MACHINE->SOFTWARE->OPENSSH,添加字符串值变量DefaultShell,值设置为Git安装目录中的bash.exe,本文是D:\Git\bin\bash.exe
4)启动OpenSSH服务
打开cmd,运行services.msc,打开服务列表,选择OpenSSH SSH Server,启动
5)创建Git仓库
新建一个仓库集目录D:\GitRepos
在该目录下打开git-bash,然后新建仓库
mkdir repo.git
git init --bare
或者 git init --bare repo.git
本地仓库和远程仓库关联
1)为远程仓库地址创建简称:git remote add 简称 远程仓库地址url
git remote add origin root@10.3.16.63:/GitRepos/repo.git
2)将本地仓库push到远程仓库
git push
在首次push的时候,需要明确本地仓库和远程仓库的哪一分支是关联的:git push -u 远程仓库地址简称 分支名(如master)
git push -u origin master
git push --setupstream origin master
创建简称和关联push分支本质上就是在config文件中增加配置项,通过直接vim .git/config编辑配置项也可以达到同样的效果,不过较为麻烦
当没有配置ssh时,每次push都需要输入远程服务器的密码,可以通过配置ssh服务器,而无需输入密码就将本地仓库推送至远程仓库
SSH配置
ssh服务的配置,就是将本地机器的ssh公钥配置到服务器端的ssh配置授权文件中,使得本地和远端通过ssh服务连接,在pull和push的时候不用输入服务器密码
Linux服务端配置
***关键路径:1. ssh服务端配置文件sshd_config路径:/etc/ssh/sshd_config,2. 客户端公钥文件authorized_keys存放路径:%h/.ssh/authorized_keys
1)本地客户端生产ssh公钥、私钥对(客户端为Linux)
ssh-keygen -t rsa -C "test@test.com"
2)回车,提示选择ssh公钥、私钥对的路径及文件名,默认为/root/.ssh/id_rsa 和/root/.ssh/id_rsa.pub
3)提示输入密码,不输入表示为空,此处两次回车,如果一切都按默认的可以将2、3步连续三次回车即可
4)修改Linux服务器的sshd_config配置文件
在/etc/ssh目录下打开终端,vim sshd_config,添加配置项
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys 是客户端公钥的存放路径
5)将客户端的公钥导入到授权keys文件中
ssh root@10.3.16.63 'cat >> ~/.ssh/authorized_keys" <~/.ssh/id_rsa.pub
提示输入密码,输入服务器端的root密码即可
root@10.3.16.63's password:
~/.ssh的最低权限为700,~/.ssh/authorized_keys的最低权限为600,可以查看一下权限是否满足,不满足则用chmod修改权限
6)重启ssh服务
systemctl restart ssh
Windows服务端配置
***关键路径:1. OpenSSH服务端配置文件sshd_config路径:C:\ProgramData\ssh\sshd_config,
***2. 客户端公钥文件authorized_keys存放路径:C:\ProgramData\ssh\administrators_authorized_keys
***Windows下配置文件和公钥文件的路径都相同,并且公钥文件名前需要把组名作为前缀administrators_
***在配置文件中公钥路径文件名不需要加组名,AuthorizedKeysFile .ssh/authorized_keys
1)本地客户端生产ssh公钥、私钥对(客户端为Linux)
ssh-keygen -t rsa -C "test@test.com"
2)回车,提示选择ssh公钥、私钥对的路径及文件名,默认为/root/.ssh/id_rsa 和/root/.ssh/id_rsa.pub
3)提示输入密码,不输入表示为空,此处两次回车,如果一切都按默认的可以将2、3步连续三次回车即可
4)修改Windows服务器的sshd_config配置文件
在C:\ProgramData\ssh目录下打开sshd_config添加配置项
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys 是客户端公钥的存放路径
5)将客户端的公钥导入到授权keys文件中
ssh Administrator@10.3.16.63 'cat >> /c/ProgramData/ssh/administrators_authorized_keys" <~/.ssh/id_rsa.pub
提示输入密码,输入服务器端的管理员Administrator密码即可
Administrator@10.3.16.63's password:
6)重启ssh服务--没有重启命令,就先stop,然后再start
net stop sshd
net start sshd
测试ssh是否配置成功
在客户端用git clone对服务器端的仓库进行clone,如果ssh配置成功,则不需要输入服务器端的用户密码即可克隆
mkdir /test_ssh_set
cd /test_ssh_set
git clone root@10.3.16.63:/GitRepos/repo.git
Note:
不论是用git init还是git init --bare创建的远程仓库,在服务器端的远程仓库无法看到客户端的工作区的工程文件。通过push将本地的仓库上传后,在远程仓库中只有仓库文件.git或者裸仓库。本地的工程文件被提交到git仓库后,转换成了仓库文件,当采用git clone
将远程仓库克隆为本地仓库的时候,git clone
会恢复出工作区的工程文件。