Git安装/VScode+Git+Github
1. 相关简介
-
git
版本控制工具,支持该工具的网站有Github、BitBucket、Gitorious、国内的OS China仓库、Csdn仓库等
shell
shell 是 linux、unix 系统的外壳,也可以理解为命令行
-
git bash
git 命令下的模拟终端、bash 是 shell 的一种,最常用的 shell 之一
-
git GUI
git 命令下的图形化控制界面
2. Git安装 ( windows环境 )
设置安装到本地主机(localhost)的路径
选择组件
-
红色区域
- 是否在桌面上安装额外( additional )图标/快捷键
- 是否在所有的控制终端窗口使用True Type字体
- 是否每天检查 windows 版本的 git更新
-
蓝色区域(建议)
- 是否在 windows 资源管理器集成( intergration ) git bash、git GUI
- 是否支持git LFS (Large File Support)
- 是否在默认文本编辑器关联( associate )所有的git 配置文件
- 是否关联 .sh 文件与 bash 一起运行
是否在开始菜单栏显示 git
选择默认的 git 编辑器
- 下面的英文大致意思: Vim 编辑器,是强大的,但是也是很难使用的;它的用户界面是非常直观的,但是它的键绑定是非常笨拙的
- Note:Vim 是 git 在 windows 上默认的编辑器,是出于历史原因;强烈建议更改到现代的GUI编辑器
- Note:若需要更改,这将使核心编辑器初始化,接下来返回到编辑器环境变量设置;默认编辑器是 Vim,您可以选择更换到其他编辑器
调整新存储库中初始分支的名称
调整新存储库中初始分支的名称 (您希望 git 在 ”git init” 之后为初始分支取什么命名?)
是否让 git 来决定(默认)eg:“master”
-
是否重写新存储库的默认分支名称;许多团队已经重命名了他们的默认分支;
常见的选择是“main”、“trunk(分支)”和“development”
调整你的 PATH 环境变量
调整你的 PATH 环境变量
-
是否只在 git bash上使用 git
(这是最安全的选择,因为您的PATH根本不会被修改。您只能使用 git bash 的 git 命令行工具。但是这将不能通过第三方软件使用)
-
是否在命令行终端和第三方软件上使用 git(建议)
(该选项被认为是安全的,因为它仅向PATH添加了一些最小的Git包装器,以避免使用可选的 Unix 工具造成环境混乱。
您将能够从 git bash,命令提示符和 Windows PowerShell 以及在PATH中寻找 git 的任何第三方软件中使用 git。这也是推荐的选项)
-
是否在命令行终端和可选的 Unix 工具上使用 git
(git 和可选的 unix 工具都将添加到您的PATH中)
(警告:这将覆盖 Windows 工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项)
选择HTTPS传输后端
-
选择HTTPS传输后端
您希望 git 将哪个 SSL/TSL 库用于HTTPS连接?
-
是否使用OpenSSL库
(服务器证书将使用 ca-bundle.crt 文件进行验证。这也是我们常用的选项)
-
是否使用使用本地 Windows 安全通道库
(服务器证书将使用 Windows 证书存储验证。此选项还允许您使用公司的内部根CA证书,例如通过 Active Directory Domain Services )
配置行尾符号转换
配置行尾符号转换(conversions)
-
签出 Windows 风格,提交 Unix 风格的行尾
(签出文本文件时,git 会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,
这是 Windows 上的推荐设置(“ core.autocrlf” 设置为 “ true” ))
-
按原样签出,提交 Unix 样式的行尾
(签出文本文件时,git 不会执行任何转换。 提交文本文件时,CRLF将转换为LF。对于跨平台项目,
这是Unix上的建议设置(“ core.autocrlf” 设置为 “ input” ))
-
按原样签出,按原样提交
(当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf” 设置为 “ false” ))
配置终端模拟器(emulator)以与 git bash 一起使用
配置终端模拟器(emulator)以与 git bash 一起使用
-
使用MinTTY(MSYS2的默认终端)
(git bash 将使用MinTTY作为终端模拟器,该模拟器具有可调整大小的窗口,非矩形选择和Unicode 字体。
Windows 控制台程序(例如 交互式 Python )必须通过 “ winpty” 启动才能在MinTTY中运行)
-
使用 Windows 的默认控制台窗口
(git 将使用 Windows 的默认控制台窗口(“cmd.exe”),该窗口可以与 Win32 控制台程序(如 交互式 Python 或 node.js )一起使用,
但默认的回滚非常有限,需要配置为使用 Unicode 字体以正确显示 非 ASCII 字符,并且在 Windows 10 之前,其窗口不能*调整大小,
并且只允许矩形文本选择)
选择 git pull 的默认行为
选择 git pull 的默认行为;默认情况下“git pull”应该是什么?
-
默认(快进或者合并)
(这是 “git pull” 的标准行为:尽可能将当前分支快进到获取的分支,否则创建合并提交)
-
重新定义
(将当前分支重设为迂回分支。如果没有要重设基础的本地提交,这相当于快速前进)
-
永远只快进
(快进到获取的分支。如果不可能,则失败)
配置凭据帮助
配置凭据帮助
-
git 凭据管理器核心
(使用新的跨平台版本的凭证管理器在这里查看有关 git 凭证管理器未来的更多信息)
git 凭据管理器(已弃用)
无(不使用凭据帮助)
配置额外的选项
配置额外的选项
-
启用文件系统缓存
(文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”设置为 “true” )。 这提供了显著的性能提升)
-
启用符号链接
(启用符号链接(需要 SeCreateSymbolicLink 权限)。请注意,现有存储库不受此设置的影响)
配置实验选项
配置实验选项
-
启用对伪控制台的实验性支持
(这允许在 git bash 窗口中运行 node 或 python 之类的本机控制台程序,而不使用 winpty,但它仍然存在已知的 bug )
配置环境变量
-
安装成功后需要配置 git 环境变量
注意该步骤为 git 在 windows cmd 命令中配置,如果不配置,直接使用Git Bash即可
git 目录下的 bin(如 C:\Program Files (x86)\Git\bin )添加到 PATH 环境变量中
验证是否配置成功,打开 windows命令行,输入 git --version 命令,出现版本号即配置成功
3. Git安装 ( Mac 环境 )
- 通过 homebrew 安装 git
-
若没有安装 homebrew ,需先安装 homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
一般上面一种情况下会报错,连接不上 raw.githubusercontent.com,原因是域名被污染了,无法解析
第一种解决办法:用SwitchHosts软件+IPaddress网站重置 raw.githubusercontent.com 这个网站的连接IP
-
第二种解决办法 : 使用国内源,下面是中科大源:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
-
安装好 homebrew,再通过 homebrew,安装 git
brew --version # 查看homebrew的版本,以检测是否安装成功
brew install git # 安装git -
git 配置(针对 Mac 和 Linux)
-
配置全局变量
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
-
4. Git安装 ( Linux 环境 )
-
CentOS 系统安装 git
yum -y install git
-
Ubuntu系统安装 git
sudo apt-get install git
5. VScode下通过 git 连接到 github 的远程仓库
-
生成 ssh 密钥
ssh-keygen -C 'your email address@xxx.com' -t rsa
# 3次回车,什么都不用输入
# 会在用户目录~/.ssh/下建立相应的密钥文件 -
上传公钥
cd ~/.ssh # 进入.ssh文件夹
cat id_rsa.pub # 查看id_rsa.pub文档下的公钥,并复制
# 公钥是保存在id_rsa.pub文档中
# 私钥是保存在id_rsa文档中 将复制下来的公钥,添加到 github 的 ssh keys 里
-
回到终端,测试是否连接成功
ssh -T 'your email address@xxx.com'
# 若连接成功,会出现'Hi github用户名!,You've sucessfully authenticated(身份验证) ……;' -
初始化一个 git 仓库
git init newrepo(在newrepo目录下初始化git仓库)
# git仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变 -
向 git 仓库添加文件
git add .xxxx # 添加指定文件
git add README # 添加注释文档
git commit -m # 初始化项目版本 -
克隆项目文件到本地
git clone "github项目地址" <directory>(克隆到指定的本地目录)
- 以上方法适用于 Mac 和 Linux ;Windows 下的实现方式基本也是一样的
6. 常用 git 命令清单 ( 备用 )
-
常用6个命令
# 专用名词译名 1. Workspace:工作区
2. Index/Stage:暂存区
3. Repository:仓库区(或本地仓库)
4. Remote:远程仓库 -
新建仓库
$ git init
# 在当前目录新建一个Git代码库 $ git init [project-name]
# 新建一个目录,将其初始化为Git代码库 $ git clone [url](github上项目的地址)
# 下载一个项目和它的整个代码历史 -
配置
# git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置) $ git config --list
# 显示当前的Git配置 $ git config -e [--global]
# 编辑Git配置文件 $ git config [--global] user.name "[name]"
$ git config [--global] user.email "[your email address]"
# 设置提交代码时的用户信息 -
增加/删除文件
$ git add [file1] [file2] ...
# 添加指定文件到暂存区 $ git add [dir]
# 添加指定目录到暂存区,包括子目录 $ git add .
# 添加当前目录的所有文件到暂存区 $ git add -p
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交 $ git rm [file1] [file2] ...
# 删除工作区文件,并且将这次删除放入暂存区 $ git rm --cached [file]
# 停止追踪指定文件,但该文件会保留在工作区 $ git mv [file-original] [file-renamed]
# 改名文件,并且将这个改名放入暂存区 -
代码提交
$ git commit -m [message]
# 提交暂存区到仓库区 $ git commit [file1] [file2] ... -m [message]
# 提交暂存区的指定文件到仓库区 $ git commit -a
# 提交工作区自上次commit之后的变化,直接到仓库区 $ git commit -v
# 提交时显示所有diff信息 $ git commit --amend -m [message]
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend [file1] [file2] ...
# 重做上一次commit,并包括指定文件的新变化 -
分支
$ git branch
# 列出所有本地分支 $ git branch -r
# 列出所有远程分支 $ git branch -a
# 列出所有本地分支和远程分支 $ git branch [branch-name]
# 新建一个分支,但依然停留在当前分支 $ git checkout -b [branch]
# 新建一个分支,并切换到该分支 $ git branch [branch] [commit]
# 新建一个分支,指向指定commit $ git branch --track [branch] [remote-branch]
# 新建一个分支,与指定的远程分支建立追踪关系 $ git checkout [branch-name]
# 切换到指定分支,并更新工作区 $ git checkout -
# 切换到上一个分支 $ git branch --set-upstream [branch] [remote-branch]
# 建立追踪关系,在现有分支与指定的远程分支之间 $ git merge [branch]
# 合并指定分支到当前分支 $ git cherry-pick [commit]
# 选择一个commit,合并进当前分支 $ git branch -d [branch-name]
# 删除分支 $ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
# 删除远程分支 -
标签
$ git tag
# 列出所有tag $ git tag [tag]
# 新建一个tag在当前commit $ git tag [tag] [commit]
# 新建一个tag在指定commit $ git tag -d [tag]
# 删除本地tag $ git push origin :refs/tags/[tagName]
# 删除远程tag $ git show [tag]
# 查看tag信息 $ git push [remote] [tag]
# 提交指定tag $ git push [remote] --tags
# 提交所有tag $ git checkout -b [branch] [tag]
# 新建一个分支,指向某个tag -
查看信息
$ git status
# 显示有变更的文件 $ git log
# 显示当前分支的版本历史 $ git log --stat
# 显示commit历史,以及每次commit发生变更的文件 $ git log -S [keyword]
# 搜索提交历史,根据关键词 $ git log [tag] HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,每个commit占据一行 $ git log [tag] HEAD --grep feature
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 $ git log --follow [file]
$ git whatchanged [file]
# 显示某个文件的版本历史,包括文件改名 $ git log -p [file]
# 显示指定文件相关的每一次diff $ git log -5 --pretty --oneline
# 显示过去5次提交 $ git shortlog -sn
# 显示所有提交过的用户,按提交次数排序 $ git blame [file]
# 显示指定文件是什么人在什么时间修改过 $ git diff
# 显示暂存区和工作区的差异 $ git diff --cached [file]
# 显示暂存区和上一个commit的差异 $ git diff HEAD
# 显示工作区与当前分支最新commit之间的差异 $ git diff [first-branch]...[second-branch]
# 显示两次提交之间的差异 $ git diff --shortstat "@{0 day ago}"
# 显示今天你写了多少行代码 $ git show [commit]
# 显示某次提交的元数据和内容变化 $ git show --name-only [commit]
# 显示某次提交发生变化的文件 $ git show [commit]:[filename]
# 显示某次提交时,某个文件的内容 $ git reflog
# 显示当前分支的最近几次提交 -
远程同步
$ git fetch [remote]
# 下载远程仓库的所有变动 $ git remote -v
# 显示所有远程仓库 $ git remote show [remote]
# 显示某个远程仓库的信息 $ git remote add [shortname] [url]
# 增加一个新的远程仓库,并命名 $ git pull [remote] [branch]
# 取回远程仓库的变化,并与本地分支合并 $ git push [remote] [branch]
# 上传本地指定分支到远程仓库 $ git push [remote] --force
# 强行推送当前分支到远程仓库,即使有冲突 $ git push [remote] --all
# 推送所有分支到远程仓库 -
撤销
$ git checkout [file]
# 恢复暂存区的指定文件到工作区 $ git checkout [commit] [file]
# 恢复某个commit的指定文件到暂存区和工作区 $ git checkout .
# 恢复暂存区的所有文件到工作区 $ git reset [file]
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset --hard
# 重置暂存区与工作区,与上一次commit保持一致 $ git reset [commit]
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset --hard [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 $ git reset --keep [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变 $ git revert [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支 $ git stash
$ git stash pop
# 暂时将未提交的变化移除,稍后再移入 # 其它
$ git archive
# 生成一个可供发布的压缩包
- git git bash git shell的区别:https://blog.csdn.net/BSBSDXBD/article/details/51090004
- git-Windows :https://www.cnblogs.com/xueweisuoyong/p/11914045.html
- git-Macos :https://www.cnblogs.com/guoccf/p/13089913.html
- git-Macos :https://www.cnblogs.com/wuliqqq/p/13233262.html
- 配置git :https://www.jianshu.com/p/6e1de95828a8
- git-Ubuntu :https://www.cnblogs.com/larry2016/p/13977251.html
- git-Linux :https://www.cnblogs.com/fuzongle/p/12830572.html
- 常用 git 命令清单:https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html