Git简介
git是一个版本控制工具,最初创建目的是为了协同Linux开发而产生的,该工具具有以下的特性:
- 允许多个开发者协同开发
- 不允许覆盖不同开发者间对仓库的改动
- 具有历史版本控制功能
下图(来自于Tutorialspoint展示的是git基本流程,首先是由本地的仓库增加问价到Stage区域,然后再由Stage提交到远程仓库:
此外,下图(来自于菜鸟教程)展示了git常使用的6个命令(git clone | push | add | commit | checkout | pull)之间的使用关系:
git基本使用
1. 通过使用git命令进行初始化
$ git init
2. 初始化之后可以设定用户名,其中--global参数是设定全局,不使用该参数则是针对当前git有效
$ git config --global user.name "winter" #用户名
$ git config --global user.email "info@winter.xyz" #用户邮箱
3. 之后可以通过add远程仓库(假定已经创建好远程仓库)
$ git add . #增加当前目录下所有文件
$ git add hello.c #增加指定文件
$ git commit -m "Init commit"
$ git remote add origin gituser@git.server.com:project.git
$ git push origin master
4. 创建分支并切换到该分支:
$ git checkout -b NewBranchName
5. 拉取远程仓库代码
$ git fetch #拉取
$ git pull
6. 分支基本使用
$ git branch #查看当前使用的分支
$ git clone https://reomte-resp/your-project
克隆远程仓库,如果远程仓库有依赖第三方库,可以查阅该仓库的README文件进行操作
$ git branch -a #显示所有的分支
$ git branch -r #查看远程分支
$ git checkout master #切换到master分支
$ git checkout -b LocalBranchName origin/RemoteBranchName #创建分支并切换到该分支
$ git pull origin RemoteBranchName #从远程仓库更新到本地代码
$ git commit -am "document for new branch commit message." #as a command says.
$ git push --set-upstream origin RemoteRespName # git push -u origin RemoteRespNam
$ git push #推送到远程仓库
$ git push origin :old_branch #删除远程分支
$ git branch -d old_branch #删除本地分支
git常用指令
$ git log #查看提交的记录
$ git show commit-id #指定提交的信息
$ git diff # 查看提交前后区别,+表示增加,-表示删除
$ git merge dev #合并dev分支
7. 新增分支并提交
首先切换到master分支
git checkout master
创建分支并切换到该分支
git checkout -b new_branch
更新代码并提交
git add .
git commit -m "init new_branch"
推送到远程
git push origin new_branch
推送到其他仓库
git remote add xxx https://xxxxxx.git
git push xxx HEAD:xxx_branch
8. clone仓库指定分支
git clone -b branch_name http://xxxx
9. 使用RSA密钥进行链接
新建密钥对,位于~/.ssh文件夹下,如
id_rsa_aliyun和id_rsa_aliyun.pub
在~/.ssh文件夹下设置config文件
#Aliyun
HOST code.aliyun.com
HostName code.aliyun.com
User wentuo1996
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_aliyun
使用RSA算法密钥,需要声明
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
10. 管理git登陆凭证(HTTPS方式)
Windows:
控制面板->用户账户->管理Windos凭据
Control Panel->User Accounts->Manage Windows Credentials
查找到对应账户编辑即可
如果git的时候出现以下错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/home/winter/.ssh/id_rsa_aliyun' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/winter/.ssh/id_rsa_aliyun": bad permissions
git@code.aliyun.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
导致该错误的原因是因为权限过于开放,需要把权限设置更小,如:
chmod 600 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
10. 更换git仓库地址
方法有三种:
- 修改命令
git remote set-url origin [url]
- 先删后加
git remote rm origin
git remote add origin [url]
- 直接修改config文件
使用问题
git 通过代理提交失败
错误:
Failed to connect to github.com port 443 after 21069 ms: Timed out
解决方法:
git config --global http.proxy <address\>:<port\>
git 通过代理clone失败
错误:
Cloning into 'VulkanSamples'…
fatal: unable to access 'https://github.com/LunarG/VulkanSamples.git/': OpenSSL SSL_read: Connection was reset, errno 10054
解决方法:
git config --global http.sslVerify "false"
gitignore不生效
不生效的现象表现为添加进来ignore的文件或者文件夹依旧会被归入版本管理中。
git rm -r --cached .
git add .
git commit -m ".gitignore Fixed"
remote link operation
git remote rm origin #delete origin remote link
git remote -v # show the current remote links
ssh -T git@github.com Connection timed out
参考 https://docs.github.com/zh/authentication/troubleshooting-ssh/using-ssh-over-the-https-port
该命令默认使用22端口,可以切换到443端口进行使用
$ ssh -T -p 443 git@ssh.github.com
修改config文件
#Github HOST github.com # before hostname: github.com HostName ssh.github.com User xxxx PreferredAuthentications publickey IdentityFile ~/.ssh/xxx_rsa # add this Port 443
测试
$ssh -T git@ssh.github.com Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.