Git 是一个免费开源分布式版本控制系统,由于其占用空间小、性能快,优于其他SCM工具(SVN、CVS等),主要用于代码版本管理。
GitHub 是基于 Git 的免费版本控制仓库(开源项目集中地),任何人都可以上传或下载平台上的开源项目,全球有6500万的开发者在使用。
Git 通过 commit 对象来保存每一次提交的版本内容,其中 tree对象指向所有代码文件的快照。多版本之间通过 parent 对象进行链接。
Git 管理的文件,有4个状态:
# 1、终端下,执行下面命令,安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2、安装git
brew install git
# 3、安装完成,首先设置全局名称和邮箱(修改下面邮箱和用户名)
git config --global user.name ×××
git config --global user.email ×××@×××
# Debian/Ubuntu
apt-get install git
# up to Fedora 21
yum install git
# Fedora 22 and later
dnf install git
# 安装完成,首先设置全局名称和邮箱(修改下面邮箱和用户名)
git config --global user.name ×××
git config --global user.email ×××@×××
路径文件 | 描述 |
---|---|
/etc/gitconfig | 包含系统上每一个用户及他们仓库的通用配置。
执行 |
~/.gitconfig ~/.config/git/config | 只针对当前系统用户。
用 |
.git/config | 当前仓库的 Git 配置文件。
用 |
# 查看所有git配置,可能会有重复,因为来自不同配置文件(/etc/gitconfig 和 ~/.gitconfig),后面显示的配置信息会覆盖前面
$ git config --list
# 查看所有git配置,以及对应的配置文件
$ git config --list --show-origin
# 查看单个配置信息
git config user.name
# 查询所有可用配置信息
git help config
有些文件不需要 git 进行版本管理,譬如编译生成的 cache 文件等,可以使用 .gitignore
对其进行忽略。
glob模式 | 简化版的正则匹配 |
---|---|
* | 匹配零个或多个任意字符; |
? | 只匹配一个任意字符; |
abc | 匹配任何一个列在方括号中的字符 ; |
0-9 | 表示匹配所有 0 到 9 的数字; |
** | 表示匹配任意中间目录,比如 |
序号 | 描述 |
---|---|
1、 | 空行或者 |
2、 | 匹配模式可以以( |
3、 | 匹配模式可以以( |
4、 | 要忽略指定模式以外的文件或目录,可以在模式前加上叹号( |
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
远程仓库名字 origin 与分支名字 master 一样,在 Git 中并没有任何特别的含义
git init
时,默认的起始分支名字; git clone
时,默认的远程仓库名字, 如果运行 git clone -o booyah
,那么远程分支名字将会是 booyah/master
。HEAD是一个符号引用,指向当前分支。
$ cat .git/HEAD
ref: refs/heads/master
如下版本提交记录(提交顺序从上到下、从左到右),A的上个版本是 B 和 C。更多...
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2
怎么使用 Git 的命令进行文件版本管理?详情,看这里!
GitHub 有三种方式下载代码:
配置ssh key,可以免密下载Github代码,既方便又安全,需要使用到 ssh-keygen 工具。
# 1、打开 Terminal(终端),查看已有密钥(.pub后缀的文件名)
$ ls -al ~/.ssh
# 2、如果没有就创建一个
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 3、复制下面输出到剪切板(下面两个适用mac系统)
$ cat ~/.ssh/id_rsa.pub
$ pbcopy < ~/.ssh/id_rsa.pub
$ cat ~/.ssh/id_rsa.pub | pbcopy
# 4、登录github官网,按照这个路径新建 SSH key
Settings --> SSH and GPG keys --> New SSH key
1、填写名字(随意填写,保证下次看到能明白是哪里的key);
2、粘贴剪切板内容到key的输入框中;
3、保存。
# 5、Terminal(终端)检查是否可以成功连接
$ ssh -T git@github.com
# 6、Github随便找个项目,测试下载,看看是否成功
$ git clone git@github.com:shipwright-io/build.git
如果觉得在终端输入命令太麻烦,可以使用 Github 提供的桌面应用工具 GitHub Desktop 。
为开源项目贡献代码的流程:
# 1、登录Github,找到项目,单击 Fork 按钮来获得项目副本
# 2、下载项目副本到本地
git clonet git@github.com:***/test.git
# 3、新建分支
cd test
git checkout -b branch1
# 4、修改代码
# 5、提交代码到本地仓库
git commit -a -m '修改代码'
# 6、推送本地仓库到远程仓库(项目副本)
git push origin branch1
# 7、登录 Github,提示项目有新分支,并创建 pull request 发送给源项目
# 8、源项目作者可以看到这个 pull request,由他决定是关闭还是合并
如果源项目比副本多很多提交版本,在副本上提交的分支会无法提交 pull request,这样来解决:
# 1、下载源项目最新代码
git remote add upstream git@github.com:***/orgin.git
git fetch upstream
# 2、合并最新代码到自己分支
git merge upstream/master
# 3、有可能会产生冲突,修复冲突并使得功能完好
# 4、推送分支代码到远程仓库(项目副本)
git push origin branch1
# 5、登录Github,并发送 pull request 给源项目
fork项目是不会随着源项目自动更新的,需要手动更新
# 1、切换到fork项目的分支master
git checkout master
# 2、拉取源项目代码并合并到当前分支
git pull https://github.com/progit/progit2.git
# 3、推送更新后的代码到fork项目
$ git push origin master (3)
# 上面每次更新都需要输入源项目地址,太麻烦,如下方式简化
# 1、添加源项目地址到本地
git remote add progit https://github.com/progit/progit2.git
# 2、把master分支的拉取代码的地址设置为源项目地址
git branch --set-upstream-to=progit/master master
# 3、将默认推送仓库设置为 origin
git config --local remote.pushDefault origin
# 4、之后更新代码方式
git checkout master
git pull
git push
推荐使用 VS Code 来编辑代码,支持所有编程语言,只需要安装插件即可,git也是内置的,只需要鼠标点击即可完成git操作,无需输入复杂的git命令。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。