使用的Git及各Git平台操作指南
本地Git连接到Github
创建SSH Key。
在bash界面执行如下指令,创建一个新的SSH Key。
如果之前有创建过,则无需重复创建。一般Windows的Key存放位置为C:\Users\<User Name>\.ssh
;Linux的Key存放位置为用户HOME文件夹下的.ssh
文件夹内。
<Your Email>
处填写你注册Github的邮箱
1 | ssh-keygen -t rsa -C "<Your Email>" |
在Github上登记你的Key
用文本编辑软件打开上个步骤创建的Pub Key(id_rsa.pub)文件,将整个文件内容复制出来。
打开Github,登录后打开SSH and GPG keys ,右上角点选New SSH Key
,Title
填写该Key的备注,然后将刚才整个复制出来的文本全部粘贴到下方的Key
文本框里面,点击Add SSH Key
即可。
在BitBucket上登记你的Key
用文本编辑软件打开上个步骤创建的Pub Key(id_rsa.pub)文件,将整个文件内容复制出来。
打开BitBucket,登录后打开SSH keys ,点击Add Key
,Title
填写该Key的备注,然后将刚才整个复制出来的文本全部粘贴到下方的Key
文本框里面,点击Add SSH Key
即可。
本地尝试登录(Github)
输入ssh -T git@github.com
后按回车。
出现hi + 你的用户名
等字样说明密钥验证通过了,可以正常使用了。
本地尝试登录(BitBucket)
输入ssh -T git@bitbucket.com
后按回车。
出现You can use git to connect to Bitbucket. Shell access is disabled
字样说明密钥验证通过了,可以正常使用了。
本地尝试登录(Coding)
输入ssh -T git@e.coding.net
后按回车,若登录成功则会返回如下消息:
1 | CODING 提示: Hello xxx, You've connected to coding.net via SSH. This is a Personal Key. |
对于 Coding 无法登录和Permission Denied
等问题请查看本站文章 无法通过 ssh 登录到 Coding 的解决方法 。
设置本地username和email
1 | git config --global user.name "Github用户名" |
使用 Access Token 登录
首先申请Access Token,在浏览器打开Personal access tokens,右上角选择“Generate new token (classic)”,设置备注和过期日期,然后选择权限,最后Generate Token,保存展示的Token,该Token只会展示一次,如果已经忘记或者没有保存则需要重新创建。
使用时将Token添加进Git链接中即可:
1 | git remote add origin https://<your token>@github.com/<your account>/<your repository>.git |
如果本地已经有仓库和更改则可以更新Git链接:
1 | # 移除原来的远程链接 |
Git 设置代理
在这一节中,
http://127.0.0.1:1111
指代你的代理服务器;
本节内容均以 Github 为例。
全局代理
不推荐使用全局代理,因为可能会出现配置不生效的情况以及其他国内托管平台也走代理的情况。
1 | #使用http代理 |
部分代理
部分代理是指在 gitconfig 中设置指定的域名走代理,Windows 的 Git 配置文件在"C:\Users\<Username>\.gitconfig"
,Linux 的 Git 配置文件在~/.gitconfig
。
若上述文件不存在则在对应位置创建该文件即可,注意该文件的默认换行符是Unix (LF)
而非Windows (CR LF)
。
添加部分代理的方法也很简单,打开上述文件,在文件末尾添加:
1 | [http "https://github.com"] |
http
后面的参数为你想代理的服务器地址,例如 Coding 则为https://e.coding.net
;Proxy
则为你的代理服务器地址。
代理需要认证
将代理服务器地址部分更改为如下:
1 | http://127.0.0.1:1111 -> https://username:password@127.0.0.1:1111 |
关联远程仓库
使用ssh协议的优点很明显:阻断不至于很强,速度比较快;但缺点也很明显:需要提前认证、在部分公司网络中可能会被防火墙拦截。
Github
新建空文件夹,打开Git Bash,输入git init
即可创建本地仓库。
打开Github上仓库的主页面,点选右上角绿色Code
按钮,国内用户(如遇HTTPS方式访问受阻)选择SSH,复制下方文本框内容待用。
回到刚才的Git Bash,输入git remote add origin <仓库地址>
回车即可。
仓库地址示例:
HTTPS:https://github.com/user/repo.git
SSH: `git@github.com:user/repo.git`
Github改版后本地还需更改branch,执行git branch -M main
即可。
BitBucket
新建空文件夹,打开Git Bash,输入git init
即可创建本地仓库。
打开Bitbucket上仓库的主页面,点选右上角Clone
按钮,国内用户(如遇HTTPS方式访问受阻)选择SSH,复制下方文本框内git clone
后面的内容待用。
回到刚才的Git Bash,输入git remote add origin <仓库地址>
回车即可。
仓库地址示例:
HTTPS:https://user-admin@bitbucket.org/user/repo.git
SSH: `git@bitbucket.org:user/repo.git`
多远程仓库
当一个本地代码仓库需要同时同步到多个远程仓库时就需要设置多远程仓库(例如同时上传到Github、Bitbucket和coding)。
在已有的仓库里面执行如下命令即可。
1 | git remote set-url --add origin <远程仓库地址> |
提交
正常提交
git add .
添加所有文件(除.gitignore内容外的)作为需要提交的文件。git commit -m "Messages"
添加提交注释,引号内为注释内容。git push -u origin <branch>
推送提交至远程仓库。视实际情况决定branch,一般Github为main
。
若遇到error: failed to push some refs to
等字样内容可能是远程内容与本地内容存在差异,可尝试先pull再push;或者在上面第三条命令最后加上-f
参数强制提交,但所有远程内容都会被清除并强制与本地内容保持一致。
修改上次 Commit 信息
1 | git commit --amend |
删除未Push的Commit
首先用git log
查看一下所有本地的commit,找到想删除的Commit,将commit id
复制出来,然后执行git reset <id>
即可删除当次Commit,不会对代码本身造成影响。
1 | $ git log |
同时也可以加入-hard
开关使代码恢复到该次Commmit之前(慎用)。
1 | git reset -hard 8f56215ec1ffda4a81164e26451ee1a39d869625 |
单机多Github账号
这一节操作适用于在同一台机器上需要同时登录多个账号的情况,例如在自己的电脑上同时存在且需要同时工作公司的仓库和自己的仓库。
创建额外密钥对
首先创建你额外的Key,<Your Email>
处填写你注册Github的邮箱:
1 | ssh-keygen -t rsa -C "<Your Email>" |
注意执行后会问你密钥对的保存路径,千万不能默认留空,否则会覆盖掉前面已有的密钥对,其他的密码可留空:
1 | Enter file in which to save the key (/root/.ssh/id_rsa): <输入你新的密钥对的存储位置> |
然后打开~/.ssh/config
文件,如果没有就新建一份,添加如下内容,其中IdentityFile
行指向刚才创建的私钥位置、Host
行可以随便写xxx.github.com
,其余参数不要更改:
1 | # Other Keys |
保存后退出,测试是否生效:
1 | ssh -T git@<Host> |
添加仓库
因为Host发生了更改,因此添加仓库时对应的仓库域名也需要做出更改:
1 | git remote add origin git@<Host>:xxx/a.git |
此外可能还需要修改一下提交时所用的用户名和邮箱:
1 | git config user.name "Github用户名" |
Pull Request
在 Github 上提交 Pr 通常分成以下几个部分:将仓库Fork
到自己的 Github 账户下,Clone
到本地,修改,提交,Pull Request。
获得源码
- 将仓库
Fork
到自己的Github账户下。 - 通过
git clone
将仓库复制到本地。
提交
正常提交到自己仓库即可。
提交 Pull Request
点击Contribute
即可创建新请求。
和远程同步
在Github上自己Fork的仓库只需点击Fetch upstream
即可。
本地仓库则在仓库内执行git pull
即可。
清空所有历史并强制上传
- 切换到latest_branch分支下
1
git checkout --orphan latest_branch
- 添加所有文件
1
git add -A
- 提交更改
1
git commit -am "清除所有历史版本以减少仓库大小,请重新从远程拷贝此仓库"
- 删除分支
1
git branch -D master
- 将当前分支重命名
1
git branch -m master
- 最后,强制更新存储库
1
git push -f origin master
禁用换行符自动转换
Git 在 Windows 系统默认情况下提交时会将 CR LF 转换成 LF ,检出时 LF 转换成 CR LF 。
运行如下命令全局设定不会自动转换。
1 | git config --global core.autocrlf false |
更换默认编辑器
在 Windows 上安装 Git 时会询问使用何编辑器,如果对当时的选择不满意之后也可以改,默认是nano
。
1 | git config --global core.editor vim |
提示内存不足
git clone
过程中提示如下错误信息:
1 | fatal: Out of memory, malloc failed (tried to allocate 1048576000 bytes) |
首先可以设置一下http.Buffer
的值,看一下行不行:
1 | git config --global http.postBuffer [value] |
其中[value]
要设置为报错的那个值,比如我上面那个报错,值就要设置为1048576000
。
不过也可以试试清空Git自带的这个限制:
1 | git config --global --unset http.postbuffer |