Bootstrap

[笔记]Git使用记录

1. 下载及安装

1.1 Git

到官网下载。
安装过程:
除了改变安装位置,其他全都选择默认

1.1 TortoiseGit

到官网下载。
安装过程:
除了改变安装位置,其他全都选择默认

Configure user information先不填
在这里插入图片描述

1. 创建全新的git本地项目

  1. 在本地创建一个项目目录
  2. 使用命令行进入本地目录
D:\Project\dadi\dadi01>
  1. 从git仓库复制git地址

在这里插入图片描述
4. 到命令行窗口,输入命令git init,初始化本地git目录

D:\Project\dadi\dadi01>git init
Initialized empty Git repository in D:/Project/dadi/dadi01/.git/
  1. 使用git clone命令,会从第3步的复制git地址下载到本地目录下。如果之前没输入过git仓库地址,系统会弹出提示,输入该远程仓库的登录名及密码
D:\Project\dadi\dadi01>git clone https://gitee.com/vistajin/dadi-jxc.git
Cloning into 'dadi-jxc'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (135/135), done.
remote: Compressing objects: 100% (115/115), done.
Receiving objects:  68% (92/135)used 0 (delta 0), pack-reused 0Receiving objects:  66% (90/135)
Receiving objects: 100% (135/135), 121.79 KiB | 381.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
D:\Project\dadi\dadi01>

在这里插入图片描述
6. 本地项目创建完成

前面怎么创建git项目忘了记录,到时记载下来

2. git同步

到git项目目录下,右键文件夹空白地方,选择 git bash here
会打开git的命令行窗口
在命令行窗口下输入:git pull
就会自动拉了

$ git pull
remote: Counting objects: 986, done.
remote: Compressing objects: 100% (409/409), done.

3. Intellij 结合Git使用案例

3.1 初始设置

不记得是否需要设置了,我自己没有设置的印象,安装git,使用社区版intellij zip版本,自动就与git挂钩了。

3.2 新建分支

初次使用,如果不是同事告诉我,我不知道原来git分支入口在intellij右下角很小的地方:
在这里插入图片描述
点一下这个右下角的图标,弹出窗口中选择“New Branch”
在这里插入图片描述
输入分支名称,点[Create]
在这里插入图片描述
再点开图标,发现本地已经增加了这个分支了
在这里插入图片描述

这个分支只是在本地,登录远程仓库看,是还没有看到这个分支的。
在这里插入图片描述
回到intellij,在右下角小弹窗上,点新本地分支的三角图标,选push,在下一个窗口中继续点Push
在这里插入图片描述
再登录到远程仓库,看到远程仓库也创建了新的分支了
在这里插入图片描述
之后的工作,就通过这个右下角的小面板,针对不同的branch checkout,就可以针对某个版本工作了。

3.3 Intellij中直接提交文件到远程

在intellij的project view中(见截图蓝色圈),可以看到所有该目录下的文件,有标记不同的颜色,几个颜色的含义:

  • 白色 - 本地工作文件与本地仓库版本一致
  • 红色 - 本地新增,还未进入本地仓库(可通过git > Add将颜色变成绿色)
  • 绿色 - 本地新增,已经add到本地仓库,还未Commit(可通过git > Commit将颜色变成白色)
  • 蓝色 - 本地修改文件,还未Commit(可通过git > Commit将颜色变成白色)
    注意:以上所有颜色,仅针对本地git版本的比较。Intellij无法判断远程仓库和本地仓库是否有不同。
    在这里插入图片描述

4 Github使用心得

4.1 Personal Access Token

说明:暂时不清楚为什么必须这个,有文章说是某个github版本之后,不再允许用户名+密码提交,所以需要使用token的方式。只是项目指引需要设置,所以暂时先把流程抄过来

入口:Profile → settings → Developer settings → Personal access tokens → generate new token
之后里面有很多选项,如果只用作开发,仅点选[repo],[write:packages],[delete:packages], [admin:org],其他都留空,移到最下点【Generate token】
注意生成的token只会在页面上显示,需要复制下来存到本地。关上页面之后就再也没地方显示这个token了。但不需要担心,可以重新生成新的。

在本地,使用git clone时,会弹出验证框,可以使用现有的用户名密码登录,也可以使用上面生成的token登录。如下两个选项
在这里插入图片描述

4.2 Personal Access Token 过期

4.2.1 过期表象

如上面生成的token,如果选择了过期时间,是会过期的。过期之后,在本机连Git的时候,会收到类似下面的提示

Authentication failed

这时就要想到是token过期了。到邮箱里,也能看到一封提示邮件:

[GitHub] Your personal access token has expired
Hey @xxx,
Your personal access token “Process Repo” with repo scope has expired.
If this token is still needed, visit https://github.com/settings/tokens/xxxxx/regenerate to generate an equivalent.
If you run into problems, please contact support by visiting https://github.com/contact?tags=dotcom-accounts
Thanks,
The GitHub Team

4.2.2 更新Token步骤

可以点击链接,也可以按照4.1的方式,直接杀到个人设置中,看到有expeired的标记,点之前的设定
在这里插入图片描述
进来之后有一个提示,点[regenerate the token]就行在这里插入图片描述
这回偷懒一下,选择“No expiration”。

4.2.3 SSO 授权[Optional]

如果公司是通过SSO授权的,还需要配置并授权,如下:
在这里插入图片描述

4.2.4 本地更新token

好了,生成了新的token,本机还是记录旧的,怎么弄呢?按照以下步骤:

  1. 打开git bash
  2. 输入指令git remote -v查看当前的路径,可以看到那一串ghp_xxx就是自己之前的token
git remote -v
origin  https://[email protected]/xxxx.git (fetch)
origin  https://[email protected]/xxxx.git (push)
  1. 输入命令删掉原先的认证,再跑一次-v就发现没有之前的信息了。
git remote rm origin
git remote -v
  1. 执行命令
    说明,这里的{new token},就是上面git remote -v中看到的旧token的位置,其他的都和之前一样,简单的来说,就是用新的token替换旧的token
git remote add origin https://{new token}@github.com/xxxx.git

4.3 一个git下面有几十个repo,怎么一次性下载。

Linux下,创建sh文件,写入如下命令
命令1

TOKEN=PERSONAL_ACCESS_TOKEN_HERE

curl -s https://$TOKEN@api.github.com/orgs/yourgitname/repos?per_page=100 |  grep -e 'clone_url*' | cut -d \" -f 4 | sed "s/https:\/\//&$TOKEN@/" | xargs -L1 git clone

命令2

#!/bin/bash

TOKEN=PERSONAL_ACCESS_TOKEN_HERE
repos=( $(curl -s "https://$TOKEN@api.github.com/orgs/yourgitname/repos?per_page=200&type=all" | jq -r '.[].html_url'))

for repo in ${repos[*]}
do
  editrepo=$(echo $repo | sed "s/https:\/\//&$TOKEN@/") 
  echo $editrepo
  git clone $editrepo	
done

Windows下,调出git bash,使用cd切换到本地代码根目录。输入以下指令
其中{site} 换成自己的仓库地址,{Token}换成自己的token。{}这两个括号是需要被替换掉的

curl -s https://{Token}@api.github.com/orgs/{site}/repos?per_page=100 |  grep -e 'clone_url*' | cut -d \" -f 4 | sed "s/https:\/\//&{Token}@/" | xargs -L1 git clone

写到这里,发觉我对sh和Linux指令不大熟悉,所以另外创建了2篇文章学习,有兴趣的可以参考:
关于Curl指令
https://blog.csdn.net/happyegg/article/details/123840330
关于shell
https://blog.csdn.net/happyegg/article/details/123539013

4.4 github push

github的push原来已经不支持用户名密码提交了,所以前面生成的Access Token就有地方用了。

Push failed
Remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

解决方案:

  1. 参照4.1,生成Token并保存下来
  2. 如果之前已经使用用户名密码登录的话,参照9.2,产出

5. Git 指令集

指令说明
git init在当前目录新建一个Git代码库
git init [project-name]新建一个目录,将其初始化为Git代码库
git clone [url]下载一个项目和它的整个代码历史
git pull拉最新的代码
git branch查看本地分支,当前分支会用*标记
git branch -r查看远程分支
git branch -a查看所有分支(本地和远程),一般不推荐用,而是分别查看本地和远程
git checkout 分支名称切换分支

|:–|:–|

9. 使用问题汇总

9.1 为什么本地文件add, commnit了,但是没更新到远程仓库?

在git中,添加新的文件,更新远程仓库并不是一个步骤,而是3个步骤,分别如下:

  • git add
  • git commit
  • git push
    三个命令的用途如下:
  1. git add
    将本地项目中的工作文件,提交到暂存区中(仍然是在git的本地缓存目录内)

  2. git commit
    将暂存区中的文件提交到版本库中(此时文件还在本地),以便在本地做版本管理。

  3. git push
    将本地某个版本的文件,远程仓库下,以便其他人能使用这个已经完成了的项目文件

命令如下:

git add 要提交的文件名
git commit -m "提交的理由"
git push -u origin master

9.2 Git远程仓库输错密码,再次执行命令失败

如果在首次连接远程仓库,输错了用户名密码之后,再次使用命令连接,会直接抛出错误。

E:\com\Self\dadi\dadi001>git clone https://gitee.com/vistajin/dadi-jxc.git
Cloning into 'dadi-jxc'...
remote: [session-0642d79d] happyegg: Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/vistajin/dadi-jxc.git/'

这种情况下,需要找到git的配置位置来修改或删除。在windows下,都在控制面板进去,各个版本不同可能进入位置不同,大体位置如下:
在这里插入图片描述
能修改就修改,不能修改就删除凭证,再运行一次即可

9.3 Github 错误:OpenSSL SSL_read: Connection was reset, errno 10054

当在使用git往github远程仓库push文件时,有可能会出现这个错误。有可能之前是可以正确提交的,用着用着突然就遇到这个error了。

解决方案:

  1. 到项目根目录(有src, pom的那个目录),鼠标右键,选择“Git Bash Here”
  2. 在git窗口输入以下语句
git config --global http.sslVerify "false"

10. 参考网址

https://www.cnblogs.com/miracle77hp/articles/11163532.html

;