git的详细使用教程_git教程
1. git的下载安装
官网Git - 安装 Git
参考:Git 详细安装教程(详解 Git 安装过程的每一个步骤)_git安装-CSDN博客
2. git的基本使用方法
注:文中由包括起来的内容需要替换为说明的相应的内容
这些命令知道如何使用即可,开发中基本上使用不到,都是使用编译器的git操作
2.1 初始化/克隆仓库
# 在当前路径下初始化一个仓库,最好在一个空的路径下执行,否则当前文件的下的内容会被跟踪,当然可以再忽略文件中将其忽略git init# 使用git之前需要指明身份,名称中有空格需要用双引号括起来,最好起一个别人一看就是谁的名字git config --global user.name \"Your Name\"# 省略(默认为--local):本地配置,只对本地仓库有效(须在工作区中即项目文件夹中设置),--gobal:全局配置,所有仓库有效,--system:系统配置,对所有用户有效,地址里要是没有空格可以省略双引号git config --global user.email \"you@example.com\"# 保存用户名和密码不用每一次都输入git config --global credentail.helper store# 查看配置信息,--global可以替换为--local来查看本地配置,省略--global可以显示更多的信息git config --global --list# 查看当前仓库状态git status# 克隆一个远程仓库到本地,会在当前文件夹下初始化一个仓库,即默认执行git init命令。常用的仓库地址形式为HTTP和SSHgit clone <仓库地址># 克隆指定分支git clone -b <branchName> <仓库地址>
- 初始化仓库(或者克隆)后,在工作区中会包含
.git
文件,此为本地仓库,包括暂存区(.git
文件下的index文件) - 全局配置的文件位置为
~/.gitconfig
,在windows下体现为C:\\user\\\\.gitconfig
,本地配置在每个仓库的.git
文件夹下的config
文件
2.2 创建远程空白仓库
以gitee为例
- 每个仓库最后有一个README.md文件,用于介绍本仓库的作用、用法和特点等等
- 仓库要是开源的话也可以添加一个开源许可协议,选中初始化仓库会自动并选择好开源协议后会自动添加README.md和许可协议文件
以github为例
2.3 工作区域和文件状态
工作区域一共有四个:
- 工作区:平时存放项目代码的地方,即在你电脑上能够看见的那个目录,包括工作空间和Git管理的空间
- 本地仓库:指项目下的隐藏目录
.git
,这个不算工作区而是Git的版本库,里面存放了用户所有的提交记录,HEAD指针指向当前分支的最新一次提交 - 暂存区:也叫做索引(index),存放在
.git\\index
文件夹下,用于存放即将用于提交到本地仓库的用户更改 - 远程仓库:托管在远程服务器上的仓库,可以用于代码共享和协同工作,实现社会化编程
文件状态一共有三种:
- 修改:修改了文件,但是还没有提交到暂存区。包括对已有文件的修改,以及新建和删除的文件
- 暂存:提交到了暂存区的文件即为已暂存
- 提交:将已暂存的文件提交到本地仓库
2.4 添加远程仓库
# 初始化本地仓库后,关联远程仓库。下面的origin为给远程仓库取的名称,是可以更换的,没必要的话不要更换git remote add origin <HTTP or SSH address># 删除关联的origin远程仓库,之后可以重新关联其他的仓库或者更改关联的方式git remote rm origin# 查看远程仓库的名称git remote# 查看远程仓库的信息,会显示拉取和推送的仓库信息git remote -v# 删除关联的origin远程仓库,之后可以重新关联其他的仓库或者更改关联的方式git remote rm origin# 指定分支名称为maingit branch -M main# -u为-upstream的缩写,完整的写法为:git push -u origin main:main,意为将本地仓库的main分支(前一个main)推送给远程仓库的main分支(后一个main),本地和远程仓库的分支名称相同的时候可以只写一个main。推送之前最好进行拉取,解决合并潜在的代码冲突后再推送git push -u origin main:main# 将远程仓库的指定分支拉取到本地在进行合并,会自动进行依次合并操作,远程仓库中的修改内容和本地仓库中的修改内容没有冲突的话合并成功,否则会因为冲突而失败(需要手动解决)。以下命令相当于执行了git fetch和git merge操作,既拉取了代码也进行了合并git pull <远程仓库名> <远程分支名>:<本地分支名>git fetch # 自动抓取远程所有分支的更新,但不会自动合并git fetch <remote name> <branch name> # 抓取远程特定的分支
2.5 暂存和提交文件
# 添加文件到暂存区中git add <file># 添加所有以txt为后缀的文件,*为通配符git add *.txt# 添加所有文件到暂存区中git add .# 取消暂存文件,不推荐git reset HEAD <file name># 取消暂存文件,推荐,避免与分支切换混淆,只取消暂存区中内容,工作区中的内容不会改变git restore --staged <file name># 取消暂存文件方式二,删除暂存区的文件,但保留在工作区中git rm --cache <file name># 取消对文件的修改,若已暂存则恢复到暂存的状态,否则使其恢复到上次提交的状态。提交过的内容基本都是可以恢复的,但是没有提交的内容就不一定了。只影响工作区中的内容,不影响暂存区中内容,对未跟踪的文件无效,“--”是为了明确分隔命令和文件路径。不推荐使用git checkout -- <file path># 取消对文件的更改,若文件已暂存则恢复到已暂存的状态,否则恢复到最新提交的状态,覆盖工作目录中文件的修改。推荐使用git restore <file name># 提交所有暂存区中的内容,使用-m参数指定提交的信息,该信息会被记录到仓库中,如果不指定-m,该命令会进入一个交互式的界面,默认使用vim编辑提交信息git commit -m \"提交提示信息\" # 提交所有暂存区中的内容,只会提交在暂存区中的文件,不会提交工作区中的文件。进入vim编辑器,使用i键进入编辑模式,使用ESC键回到命令模式,输入:wq保存退出,即可完成提交git commit \"提交提示信息\" # 该一个命令可以完成暂存和提交两个动作,也就是直接跳过暂存步骤,这里-a -m也可以省略为-amgit commit -a -m \"提交提示信息\" # 查看提交记录git log# 查看简洁的提交记录git log --oneline# 列出所有已跟踪的文件,包括暂存区和已提交的文件,加上--stage会显示更加详细的内容,包括文件权限,对象哈希,暂存编号,文件名git ls-files --stage# 查看暂存区中文件的详细内容,没有修改提示。这里的:专指暂存区git show :<file path> 或者 git show :./<file path>
2.6 git reset回退版本
# 回退到提交ID处的状态,保留工作区和暂存区中的内容git reset --sofe <提交ID> # 回退到提交ID处的状态,不保留工作区和暂存区中的内容git reset --hard <提交ID> # 回退到提交ID处的状态,保留工作区,不保留暂存区中的内容git reset --mixed <提交ID># 取消暂存文件git reset HEAD <file name>
2.7 git diff查看版本差异
# 查看工作区和暂存区的差异git diff# 查看工作区、暂存区和本地仓库之间的差异git diff HEAD# 查看上一版本和当前版本的差异git diff HEAD~ HEAD# 查看上一版本和当前版本的差异git diff HEAD^ HEAD# 查看上两个版本和当前版本的差异git diff HEAD~2 HEAD# 只比较file文件的差异git diff HEAD~2 HEAD <file> # 比较暂存区和版本库(最新提交)之间的差异,有时执行完命令行显示的是部分内容+:,这是可以按方向下键,显示隐藏的内容,按q退出git diff --cached# 简洁版查看暂存区和版本库之间的差异,M表示修改,A表示新增,D表示删除git diff --staged --name-status# 完整比较暂存区和版本库之间的差异git status -vv# 两个版本之间的比较,版本为版本号,版本号之间有空格git diff <版本> <版本># 比较两个分支之间的差异git diff <分支名> <分支名>
2.8 git rm删除文件
# 删除工作区中的文件,不会删除暂存区中的内容,再进行git add file提交删除暂存区中的内容rm <file># 列出所有已跟踪的文件,包括暂存区和已提交的文件git ls-files# 把文件从暂存区中删除,但保留在工作区中git rm --cached <file># 删除工作区和暂存区中的内容,危险慎用(没有提交的文件会彻底删除无法恢复)git rm -f <file name># 递归删除暂存区中某文件夹下的内容git rm -r --cached <file path># 递归删除某个目录文件下的所有子目录和文件git rm -r -f <file path>
2.9 分支管理
# 查看分支,只显示本地的分支git branch# 指令用于显示本地和远端的所有分支git branch -a# 查看远程仓库中的所有分支git branch -r# 在当前的提交对象上创建分支(HEAD指针指向的提交位置即为当前提交对象),分支名为branch namegit branch <branch name># 切换分支,不建议使用这个切换分支可能会存在一些问题,因为该命令除了可以切换分支和状态之外,还可以用来恢复文件或者目录到之前的某一个状态git checkout <branch name># 切换分支,建议使用git switch <brach name># 将当前所在分支与远端origin仓库的feature分支建立分支间的追踪关系git push --set-upstream origin feature# 指令具有以下两个作用:1.拉取远程分支中的最新提交,并自动合并 (需要建立追踪关系)2.更新远程仓库的分支信息(不需要建立追踪关系)git pull# 删除已经合并的分支,分支不会自动删除需要手动删除git branch -d <branch name># 删除没有合并的分支git branch -D <branch name># 合并分支,这里的分支名为将要被合并的分支,而我们当前所在的分支就是合并后的目标分支,需要进入目标分支后执行git merge <branch name># 合并分支,这里的分支名为将要被合并的分支git rebase <branch name># 查看分支图,以下两个命令等效,查看各个分支当前所指的对象git log --oneline --decorategit log --graph --online --decorate --all# 给双引号里的命令起一个别名,简化操作alias <别名>=\"git log --graph --online --decorate --all\"
2.10 合并与冲突
2.10.1 使用git merge
命令进行合并
基本流程:
# 首先切换到要合并的目标分支git checkout main# 然后合并想要合并到目标分支(这里为main)上的分支git merge feature-branch
在两个分支中都对同一个文件进行了修改导致了不一致,合并就会产生冲突(可能发生在拉取代码进行合并时,合并不同分支时)。产生冲突后可以使用git status
命令查看冲突文件列表,也可以使用git diff
查看冲突的具体内容。产生冲突后需要手工编辑(纯命令行的话需要使用vim等编辑器手动修改)冲突文件,保留想要的内容,然后暂存、提交,就自动完成了合并的过程,在这之间想要终止合并可以使用下面的命令
# 终止合并git merge --abort
2.10.2 使用git rebase
命令进行变基合并
除了merge可以合并分支,rebase也可以合并分支。merge的优点是不会破会原分支的提交历史,方便回溯和查看,缺点是会产生额外的提交节点,分支图比较复杂。rebase的优点是不会产生额外的提交记录,形成线性历史,比较直观和干净缺点是会改变提交历史,改变了当前分支branch out的节点,避免在共享分支中使用。基本流程:
# 切换到特性分支git checkout feature-branch# 变基到主分支的最新提交git rebase main# 以上两行命令可以用以下命令取代,前一个分支为目标分支,后一个分支为功能分支,这样的话就不用切换分支了git rebase main feature-branch# 切换回主分支git checkout main# 再进行快速合并(无需提交)git merge feature-branch
注:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基(merge适合团队开发,rebase适合个人开发)
变基合并的提交节点顺序怎么确定:首先找到两个分支最新的相同节点,根据此节点进行划分,将当前分支(变基前执行了git checkout的分支,在2.10.2代码中为feature-branch分支)放到目标分支的节点(要变基的分支,本例中为分支main)后面。例如下图:
假设原来的分支节点如图a所示,在分支dev中git rebase main得到图b的结果(将当前分支dev变基到main上),在分支main中git rebase dev得到图c的结果(将当前分支main变基到dev上)
2.11 标记tag
# 查看标记git taggit tag -l# 查看标签的提交信息git show <tag name># 添加轻量标记,轻量标签相比于附注标签没有附注git tag <tag name> # 当前指向的提交版本创建标签git tag <tag name> <commit ID> # 给指定的提交版本创建标签# 添加附注标签git tag -a <tag name> -m <附注信息>git tag -a <tag name> <commit ID> -m <附注信息># 删除标签git tag -d <tag name># 将标签推送到远程仓库,git push命令不会推送标签,需要手动进行推送git push origin <tag name> # 推送指定名称的标签git push origin --tags # 推送所有标签# 删除远程仓库中指定的标签名称,以下命令等效git push origin :refs/tags/<tag name>git push origin --delete <tag name>
2.12 存储/贮藏
利用存储(有的叫贮藏、储藏)可以将未提交的修改(工作区 + 暂存区)临时保存到栈中,清空当前工作目录,便于切换分支、中断当前开发去修复紧急bug、跨分支转移代码等。拉取合并最新的更改时本地已经进行了修改,但是想要保留时也可以将其暂存
# 保存所有已跟踪文件的修改(默认不包含未跟踪的文件)git stash# 同时贮藏任何未跟踪文件git stash -u# 查看储存列表git stash list# 恢复贮藏git stash pop # 恢复最新贮藏并且删除记录(从栈上删除)git stash apply # 恢复贮藏但不删除记录,默认从stash@{0}恢复git stash apply stash@{1} # 恢复指定贮藏# 删除贮藏git stash drop stash@{1} # 删除单条贮藏git stash clear # 清空所有贮藏
3. vscode操作
3.1 添加/克隆远程仓库
添加和删除远程仓库
克隆仓库
3.2 暂存和提交文件
3.3 分支管理
3.4 贮藏管理
3.5 合并/回退
注意要选中需要进行变更的分支。变基的话需要根据变基的方式进行选择
3.6 使用细节/问题补充
- 部分暂存和还原,对比更该、暂存的更改和提交之间的差别
- 远程分支如果本地没有对应的,直接签出到远程分支会自动创建本地同名分支,结构和远程分支的一样
- git远程仓库的分支已经删除但是本地仍然显示有已经删除的远程仓库分支,是因为本地仍然有远程分支的缓存,需要进行手动清理或者设置自动清理
# 手动执行命令git fetch --prune # 简写git fetch -p# 配置自动清理,在每次使用fetch或pull命令时自动清除已删除的分支git config --global fetch.prune true
- 使用储藏(包含未跟踪)时,如果更改和暂存都对同一文件进行了更改,则会自动暂存更改下的文件(有时候并不想这样做)。解决方法,分开进行储藏,首先使用
储藏暂存
只储藏暂存区的内容,然后使用储藏(包含未跟踪)
储藏更改下的内容,恢复时按照需要进行回复即可 - 从master最新分支创建分支feature后,只在feature分支上完成了功能开发,使用merge合并master和feature分支,合并后的master的分支结构无分叉,按说使用merge合并会保留历史轨迹,这是因为master分支在创建feature分支后再没有进行任何提交,此时使用合并会默认启用
快进合并
,直接将master分支指针移到feature分支上,并不会产生额外的分支轨迹。可使用以下合并命令强制使用非快进合并:
git merge --no-ff feature
4. 工作流程
4.1 github flow
基本流程:
❶ 在GitHub 上进行Fork
❷ 将❶的仓库clone至本地开发环境
❸ 在本地环境中创建特性分支
❹ 对特性分支进行代码修改并进行提交
❺ 将特性分支push到❶的仓库中
❻ 在GitHub 上对Fork来源仓库发送Pull Request
以 master
(或main
)分支为唯一主干(任何提交都对应一个可发布版本),所有功能通过短期分支开发并快速合并部署,强调持续集成/持续部署(CI/CD)。从master
创建功能分支,命名应带有描述性。适用于自动化测试覆盖率高、部署流程自动化的项目
4.2 git flow
基本流程:
❶ 从开发版的分支(develop)创建工作分支(feature branches), 进 行功能的实现或修正
❷ 工作分支(feature branches)的修改结束后,与开发版的分支 (develop)进行合并
❸ 重复上述❶和❷,不断实现功能直至可以发布
❹ 创建用于发布的分支(release branches),处理发布的各项工作
❺ 发布工作完成后与master分支合并,打上版本标签(Tag)进行发布
❻ 如果发布的软件出现BUG,以打了标签的版本为基础进行修正 (hotfixes)
master
(main
)分支:时常保持着软件可以正常运行的状态,不允许开发者直接对该分支的代码进行修改和提交。只有其他分支开发进度达到可以发布的程度后才会合并(需加上Tag)。
develop
分支:不允许开发者直接进行修改和提交。程序员以该分支节点创建feature分支进行新功能的开发或者代码的修正
feature
分支:从develop 分支创建feature 分支; 在feature 分支中实现目标功能;通过GitHub向develop 分支发送Pull Request;接受其他开发者审查后,将Pull Request合并至develop分支。已经合并的分支在适当的时候需要删除。从develop创建feature分支时,最好要将远程develop分支pull下来保证本地的develop是最新的
release
分支:当功能多到足以发布时,从最新的develop分支着手,创建release分支。该分支只处理与发布前准备相关的提交。比如版本编号变更等元数据的添加工作。如果软件部署到预演环境后经测试发现BUG, 相关的修正也要提交给这个分支。没问题后再与master分支合并,合并后还要将该分支同步到develop分支,远程的分支也要同步
hotfix
分支:不是预期中计划出现的分支。它是一个紧急应对措施,只有当前发布的版本中出现BUG或漏洞,而且其严重程度要求开发方必须立刻处理,无法等到下一个版本发布时,hotfix分支才会被创建。修复后的代码直接合并到master分支,同时还要合并到develop分支(完成合并即可,尽管可能有问题也要在develop分支中修复),之后可以将hotfix分支删除
4.3 提交规范
条理清晰的提交描述信息对于共享任务有很大裨益,规范标准不唯一,下列规范仅供参考
- 提交描述信息参考规范一
:
类型:常见类型见下表;主题:使用祈使句、英文首字母小写、不超过50字符,例如:fix: 修复用户登录问题
- 提交描述信息参考规范二
(): // 空一行// 空一行
():
:范围选填,其余同规则一
:解释修改动机、实现逻辑或与旧版的差异等等
:关联任务或者标注破坏性变更
例如:
fix(ui/widgets): 修复自定义图片视图拖拽放置功能修复拖拽放置事件处理逻辑,确保正确计算插入位置并更新视图添加拖拽指示器清理逻辑,优化放置后的界面更新Fixes #789
- 提交类型
5. .gitignore文件的配置
只可忽略未被跟踪的文件,无法忽略已经存在版本库中的文件(要想删除版本库中文件,需要删除工作区中的文件然后暂存并提交),这里的版本库主要指本地仓库的.git
文件(暂存区和本地版本库)。
配置规则:
- 一行一个要忽略的内容
- 忽略单个文件:直接写入文件名即可。会忽略所有目录下的名称相同的文件,想要实现精准忽略请将文件的地址写完整,例如
/utiles/demo.py
只会忽略utiles
目录下的所有名为demo.py
文件。如果只想忽略根目录下的某一个文件使用/demo.py
,/
代表根目录 - 忽略整个目录:写入文件夹的名称+/,则会忽略整个目录及其下的所有文件。例如:
__pycache__/
会忽略所有__pycache__
文件夹包括其他目录的同名子目录。要实现准确的忽略文件夹不涉及其他子目录请使用完整路径,即加入/
根目录标志指定确定的目录 - 通配符
*
:例如:*.py
忽略所有.py
结尾的文件 - 排除符号
!
:例如:!/demo.py
不忽略根目录下的demo.py
文件,结合通配符*.py
就可以忽略其他python文件而不忽略/demo.py文件 - 忽略目录下的所有
.py
文件:例如:/doc/*.py
会忽略doc
目录下的所有.py
文件,但不会作用于doc
的子目录。要想连同子目录下的文件也一起忽略需要写成这种/doc/**/*.py
,无论文件层级多深都会将.py
文件忽略
以上规则结合使用基本可以实现所有的忽略要求
6. 使用SSH连接远程仓库/主机
OpenSSH官网
- 设置git用户名和邮箱
全局设置(可在~\\.gitconfig
文件里查看全局配置,或使用命令git config --global --list
查看)
git config --global user.name \"\" # 设置/修改全局用户名git config --global user.email <useremail> # 设置/修改全局用户邮箱
针对项目设置(须进入到相应的项目目录里设置)
git config user.name <username> # 设置/修改全局用户名git config user.email <useremail> # 设置/修改全局用户邮箱
- SSH客户端生成公私钥
使用ssh -V
查看ssh版本,现在的系统一般都会默认安装。ssh分为客户端和服务端,在客户端生成公私钥,并将公钥传输到服务端,即可远程连接服务端以进行远程开发。
查看ssh版本
ssh -V
使用如下命令生成公私钥
ssh-keygen -t rsa -b 4096 -C \"2475286497@qq.com\"
-t
:指定使用的加密算法,例如RSA、Ed25519算法
-b
:设置RSA算法的密钥长度,只对RSA算法有效,常用4096,2048现已不安全
-C
:添加注释(通常是您的电子邮件地址或用途描述),这有助于识别密钥,便于多密钥管理
-f
:指定密钥保存的路径和文件名,避免覆盖原有密钥,如果不是第一次生成,请使用此参数指定保存文件名以防止覆盖原有密钥(也可生成时指定)注:无论何时指定,指定的路径可以为绝对路径,也可以为相对路径,相对的是当前命令行工具所在的路径
执行以上命令后会在本地~\\.ssh\\
生成id_rsa
(私钥)和id_rea.pub
(公钥)文件
- 将公钥传到远程主机上
- 若需要连接远程主机,将公钥传输到远程服务器上的
~/.ssh/authorized_keys
文件中,在PowerShell中使用如下命令(若执行失败可以在git的git bash中执行)
ssh-copy-id <username>@<remote-host-ip> # 替换为远程主机的用户名 替换为远程主机的IP地址或者域名
或者手动复制(前提是你能够访问到远程主机的文件并且能够修改),首先将公钥复制,使用cat ~/.ssh/id_rsb.pub
命令可读取公钥文件的内容,然后在远程主机上执行以下内容
mkdir -p ~/.ssh # 若没有则强制创建文件夹chmod 700 ~/.ssh # 更改文件夹权限为只有创建者可以读写与执行,设置文件权限是为了安全考虑echo \"your_public_key\" >> ~/.ssh/authorized_keys # 将公钥添加到authorized_keys中chmod 600 ~/.ssh/authorized_keys # 设置文件权限为只有创建者可以读写
-
若需要和远程仓库建立连接,采用以下步骤(以
gitee
为例,github
其实一样)复制公钥同上。然后进入
gitee
登录你的账号,进入设置,点击SSH公钥,见下图。点击确定即可。然后就可以使用仓库的ssh来clone或者推送了
- 连接远程主机
ssh <username>@<IP地址或域名> # username为远程主机里的用户名,例如rootssh -i ~/.ssh/custom_key <username>@<IP地址或域名> # 可以在连接时显示的指定使用的是哪一个密钥对
如果本地有多个公私钥,可以在使用以上命令的时候加上-v
参数,让其显示连接过程中的详细信息,查看使用的是哪一个公私钥,经过测试如果在没有特殊指明的情况下,应该会按照顺序依次使用私钥验证。一般的顺序为id_rsa
→ id_ecdsa
→ id_ed25519
→ id_dsa
(具体顺序取决于SSH版本和配置)
ssh -v <username>@<IP地址或域名> #会显示连接过程中的详细信息ssh -vvv <username>@<IP地址或域名> # 显示更详细的信息
连接远程主机,若在之前已经连接过主机,在此之后远程主机可能因重装系统、升级SSH服务或更换密钥对导致公钥指纹发生变化,即使你将本地的公钥添加到远程主机的~/.ssh/authorized_keys
中你也连接不上,解决办法,删除本地旧密钥记录,执行以下命令(会删除~/.ssh/known_hosts
文件里关于远程主机的信息,成功连接后会自动更新)。然后将公钥传输到远程主机中再尝试远程连接
ssh-keygen -R <远程主机IP>
- 客户端自定义配置
SSH配置数据按以下顺序从以下来源获取:
- 命令行选项
- 用户配置文件(
~/.ssh/config
) - 系统全局配置文件(
/etc/ssh/ssh_config
)
除非特别说明,每个参数将采用首个获取到的值。配置文件由以Host
声明分隔的区块组成,这些区块仅适用于匹配声明中任一模式的主机。匹配的主机名通常为命令行指定的名称。由于每个参数采用首个获取的值,应在文件靠前位置设置更具体的主机声明,通用默认值置于文件末尾。文件采用每行一个\"关键词 参数\"对的格式。以\"#“开头的行和空行视为注释。参数可选用双引号(”)包裹以包含空格。配置选项可通过空格分隔,或通过可选空格加单个\"=\"分隔——后一种格式在使用ssh
、scp
和sftp
的-o
选项时,可避免因空格导致的引号转义需求。
部分关键词及其含义如下(注意关键词不区分大小写,参数区分大小写)官方文档ssh_config(5) - Linux manual page:
Host own-server # Host 别名,起别名之后可以直接使用命令ssh own-server连接远程主机ProxyJump user@host:8888 # 指定一个或多个跳板机,格式可以是[用户@]主机[:端口]或SSH URIHostName 88.88.88.88 # 指定实际登录的真实主机,一般为ip地址User admin # 指定的登陆用户名Port 22 # 指定的端口号。默认为22IdentityFile ~/.ssh/work_rsa # 指定私钥路径ForwardAgent yes # 启用SSH代理转发,允许通过跳板机直接访问内网服务器(无需上传私钥到中间服务器)StrictHostKeyChecking yes # 控制是否严格验证服务器密钥变更Compression no # 是否启用数据压缩TCPKeepAlive yes # 是否启用TCP保活机制,防止因空闲断开ServerAliveInterval 60 # 每60秒发送心跳包ServerAliveCountMax 3 # 最多3次失败后断开UserKnownHostsFile ~/.ssh/custom_known_hosts # 自定义已知主机密钥存储路径(避免污染全局列表)
- 服务端自定义配置
在服务端的~/.ssh/sshd_config
(这里的d为daemon守护的意思)。
可用关键字及其含义参考官方文档sshd_config(5) - Linux manual page:
7. 重装电脑系统后,安装在其他盘的git系统检测不到,解决办法
-
在系统变量的Path中添加环境变量
D:\\software\\Git\\cmd
(根据自己的安装目录来,不管怎样添加的路径一直到Git目录下的cmd目录) -
设置一下全局(或者某一仓库)的用户名和电子邮件(见前面)
-
重新生成密钥,将公钥重新添加到远程仓库
-
(可选)添加鼠标右键的git-bash选项。参考手动添加Git Bash Here到右键菜单(超详细)_gitbash添加到右键-CSDN博客
-
直接在原来的本地仓库重新拉取远程仓库的代码(建议使用命令行进行拉取)
参考
【GeekHour】一小时Git教程_哔哩哔哩_bilibili
Git基础 - git tag 一文真正的搞懂git标签的使用-CSDN博客