当前位置:   article > 正文

Git使用记录_git访问令牌可以多次删除创建吗

git访问令牌可以多次删除创建吗

文章目录

下载和基本配置

其实我用svn用了好多年了,git一直断断续续的用,老忘记一些用法,干脆写下来,方便查阅。

下载git

地址:https://git-scm.com/downloads
安装完git后,其实就能用了,不需要配环境变量。不过一些用到git的编程软件,像IDE这种是需要配置一下git.exe的路径。

查看git路径

在任意位置打开git-bash
在这里插入图片描述
键入

where git
  • 1

结果就出来了
在这里插入图片描述

关于验证

不管是使用GitHub还是GitLab,为了保证账户和数据的安全,都是需要验证的。主要有下面几种方式:双重身份验证、SSH、提交签名。
参考文档:authenticating-to-github

SSH验证设置

使用SSH协议,您可以连接和验证远程服务器和服务。一般要有私钥和公钥,生成后将公钥添加到GitHub或者GitLab对应位置,将私钥添加到ssh-agent。

  • 先检查是否有现有的ssh密钥。
    1. 打开git-bash,键入
      ls -al ~/.ssh
      
      • 1
      公钥文件一般是下面3种:id_rsa.pub、id_ecdsa.pub、id_ed25519.pub
    2. 也可以直接去.ssh文件夹查看,windows下是这个目录
      在这里插入图片描述
      注意:如果收到错误“~/.ssh 不存在,没有关系,生成新的ssh密钥时会创建文件的。
  • 生成密钥

打开git-bash键入以下命令之一即可

ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ecdsa  -C "your_email@example.com"
ssh-keygen -t rsa -C  "your_email@example.com"
  • 1
  • 2
  • 3
  • 4

然后设置安全密码(直接回车表示没有安全密码),安全密码能避免有人拿到密钥之后乱搞。然后初次运行 Git Bash 时,系统会提示要输入密码。
添加或修改密码示例:

ssh-keygen -p -f ~/.ssh/id_rsa
  • 1
  • 公钥添加到ssh-agent

确保ssh-agent在运行,用git-bash运行

eval `ssh-agent -s`
  • 1

输出

Agent pid 59566

然后添加(这条可能不需要)

ssh-add ~/.ssh/id_rsa
  • 1
  • 私钥添加到Github或者GitLab账户

GIthub->Settings->SSH and GPG keys->New SSH,复制id_rsa.pub文件的内容到Key值,输入标题然后添加SSH key。

  • 最后去GitHub项目复制ssh的后缀,然后远程地址使用xxx.ssh这种url

个人访问令牌

使用SSH密钥,可以连接到GitHub,而无需在每次访问时提供用户名或密码。但是也有一些原因会造成不好使,比如.ssh下的配置文件配置错误,再比如ssh代理没有运行。这时候使用个人访问令牌就比价好了。

个人访问令牌来代替密码,可以设置令牌的作用域或权限。
Github在Settings->Developer settings->Personal access tokens
GitLab在Settings->Access Token

GitHub能设置的权限比较多,GitLab的少;GitHub会自动删除一年内未使用过的个人访问令牌,GitLab则在一开始就设置令牌的到期时间。

新建完成后,把token字符串好好保存。
在这里插入图片描述

补充1:创建多个密钥时,指定文件名和路径,避免覆盖

使用“ -f ”来指定文件名,示例:

ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/xxx-rsa
  • 1

没有路径,我们就先创建文件夹再执行ssh-keygen

cd ~
cd  .ssh
mkdir jack
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/jack/xxx_rsa
  • 1
  • 2
  • 3
  • 4

当然路径还可以是其他,D盘、E盘都可以。

补充2:Openssh Private Key to RSA Private Key

使用命令ssh-keygen -t rsa -C “your_email@example.com”,生成的私钥开头是

-----BEGIN OPENSSH PRIVATE KEY-----

//使用以下命令强转成pem格式
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
  • 1
  • 2

再打开私钥文件,开头变成

-----BEGIN RSA PRIVATE KEY-----

可直接使用命令ssh-keygen -m PEM -t rsa -b 4096 -C “your_email@example.com”

补充3:使用Github Desktop软件管理项目不需要创建令牌和配置SSH就能正常使用Git的功能。

全局设置代理,让git clone速度如飞

取消全局代理

git config --global --unset http.proxy
git config --global --unset https.proxy
  • 1
  • 2

设置全局代理,本人使用了一个代理,本地地址是http://127.0.0.1:8123,所以设置如下

git config --global http.https://github.com.proxy http://127.0.0.1:8123
git config --global https.https://github.com.proxy http://127.0.0.1:8123
  • 1
  • 2

结果就是原来30kb/s的速度变成了4M/s,如图所示:
在这里插入图片描述
注意:上面代理设置只对使用http和https协议的连接生效,不会对通过ssh连接的操作产生影响。建议首先使用ssh协议进行clone,速度比较客观,速度很慢再换https,https速度还不行,最后再设置代理。

全局设置用户名和邮箱

主要是方便,在个人电脑上通过git的操作,都会使用这个用户名和邮箱。

git config --global user.name "name"
git config --global user.email name@example.com
  • 1
  • 2

全局设置proxy代理

windows下.gitconfig文件在C:\Users\Administrator目录下
使用文本编辑器打开,修改[http]和[https],示例如下,本地环回接口8123端口开了代理:

[http "https://github.com"]
	proxy = http://127.0.0.1:8123
[https "https://github.com"]
	proxy = http://127.0.0.1:8123
  • 1
  • 2
  • 3
  • 4
碎碎念:Empty reply from server

额,也许https有问题,把远程地址从https://换成git@。还有可能是你代理的问题,请参考上文,把代理删掉。


助于理解的一些概念

工作区、暂存区、版本库

工作区:就是你在电脑里能看到的目录。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

在这里插入图片描述
说明

  • 标记为 “master” 的是 master 分支所代表的目录树。
  • “HEAD” 实际是指向 master 分支的一个"游标",所以git命令种指定目标为HEAD的地方可以用maste来替换,结果是一样的。
  • bjects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

在这里插入图片描述
解释:绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。

.gitignore文件

把需要忽略的文件写进忽略清单里,提交时会自动忽略清单里的文件。示例:

.project
.gradle
.idea
*.iml
build
  • 1
  • 2
  • 3
  • 4
  • 5

基本命令

git init

在一个工作目录下执行git init会在这个目录创建一个.git文件夹,文件夹是隐藏的。
一般开发流程:在工作区执行init,然后执行git clone命令把远程项目拉到本地。然后各种修改之后,在项目文件夹执行各种git命令(pull add commit push等)

git clone

git clone <repo>
//克隆到指定目录directory
git clone <repo> <directory>
  • 1
  • 2
  • 3

git add

git add命令将文件添加到暂存区

git add [file1] [file2] ...  #添加多个文件
git add  [dir]   #添加目录,目录下的也会被添加
git add .  #添加当前目录下所有文件
  • 1
  • 2
  • 3

结合git status命令,可以查看哪些文件是新添加的,哪些被修改了,哪些被删了。

git commit

提交暂存区修改到本地仓库。

git commit -m [message]

#示例
git commit -m "feat(rules): add body-full-stop rule"# 添加新功能 body-full-stop规则

git commit --amend #修改最后一次提交(需要同时修改提交内容和提交信息)
git commit --amend --no-edit #修改最后一次提交(仅修改内容不修改提交信息,常用于修改笔误)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

关于-a命令:会自动暂存已修改和删除的文件,但是对于未新增的文件没有作用。

关于提交规范可以查看:

  1. 阮一峰开发者手册:Commit message 和 Change log 编写指南
  2. 知乎回答:如何规范你的Git commit?

值得一试:commitlint

git push

将本地的修改推送到远程。

命令格式

git push <远程主机名> <本地分支名>:<远程分支名>
  • 1

分支名相同可以省略

//将本地的master分支推送到远程的master分支
git push origin master
  • 1
  • 2

强制推送(不建议这么搞 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签