github使用学习

原文链接Github 使用学习

我以前只在Windows上面用过两次github的客户端,并没有了解怎么通过git将代码同步到github。对于Github的使用仅仅停留在git clone 别人的代码,并不会建立自己的仓库并利用Github这样的代码托管平台进行开发。

Git

在使用Github GitLab Gitee 这样的代码托管平台之前我们先了解Git

git

Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。

对于版本控制系统 尤其是git的文章有很多,不赘述。仅记述git命令的简单实用,不涉及git工作原理和高级用法。如果你想了解其工作方式和进阶用法,**官方提供的文档**可能是一个不错的选择。

git 常用命令

使用git之前,先了解一些简单命令

命令 作用 示例
init 初始化一个项目,将当前目录置于版本控制系统下 git init
add 将当指定目录下所有修改都添加到称为”ndex”临时存储区 git add .将当前目录添加到版本管理系统中 . 表示当前目录
commit 将”index”中的内容,永久存储到存储库中 git commit -a 自动将所有已修改的文件添加到index中并提交到存储库。等效于先执行add 命令再commit

每一次commit都只会将index(暂存区)的修改建立快照,所有未提交到暂存区的修改都不会被提交到版本管理,可以在下一次提交时纳入。 |
| diff | 显示所有没有提交到index的修改 | git diff显示所有为添加到index(暂存区)中的修改
git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件,运行 git diff 后却什么也没有,就是这个原因。

git diff -cached 查看几件通过提交的内容

git diff –staged 查看暂存区中将要提交的文件和最后一次commit(提交内容)的差异 |
| log | 查看更好改的历史记录。
| git log -p每个步骤中看到完整的差异 |
| branch | 要新建一个分支 | git branch查看所有分支

git branch dev 创建一个dev分支

git branch -d dev 删除dev分支

git branch -D dev 删除分支且不合并到master分支 |
| switch | 切换到指定分支 | git switch dev 切换到dev分支 |
| merge | 合并分支到master | git merge dev 合并分支到master |
| gitk | 图形显示生成的历史记录 | |
| status | 查看目录下的文件状态 | git status 奖显示当前目录下的文件的跟踪状态(已修改 已暂存 未修改 未跟踪)

git status -s 如果你嫌status 输出的内容太过冗长,可使用该参数或-short参数查看简略版本。
|
| rm | 删除命令 | 该命令用法见下面”删除命令部分“ |
| … | | |

git 初次使用配置

引用原话

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 –system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)

~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 你可以传递 –global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。

当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 –local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

在 Windows 系统中,Git 会查找 \(HOME 目录下(一般情况下是 C:\\Users\)USER )的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。 如果你在 Windows 上使用 Git 2.x 以后的版本,那么还有一个系统级的配置文件,Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ,Windows Vista 及更新的版本在 C:\ProgramData\Git\config 。此文件只能以管理员权限通过 git config -f来修改。

你可以通过以下命令查看所有的配置以及它们所在的文件:

|

1

|

$ git config --list --show-origin

|

1、用户信息

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

|

1
2

|

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

|

再次强调,如果使用了 –global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 –global 选项的命令来配置。

很多 GUI 工具都会在第一次运行时帮助你配置这些信息。

一、建立一个仓库

1、自己创建一个仓库

初始化一个仓库:

在一个目录下 运行命令

|

1

|

git init

|

现在,在这一个目录下会生成一个.git文件夹。表明仓库建立成功了。这个目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
有关.git文件夹的更多信息,参见官方文档

现在,我们可以在这个文件夹里面创文文件,添加项目文件了

将新文件加入版本控制:

添加文件之后,这些文件还没有被跟踪记录,不会纳入版本管理。
通过git add命令将需要跟踪的文件添加到版本记录中。稍后会介绍如何从版本记录中删除文件。

|

1

|

git add .

|

这个命令将当前文件夹的所有内容都加入了版本管理。注意不要忽略末尾的“.”

2、clone一个仓库

|

1

|

克隆仓库的命令是 git clone <url>

|

这会在当前目录下创建一个目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。

如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名:

|

1

|

git clone <url>

|

这会执行与上一条命令相同的操作,但目标目录名变为了 newname
url参数支持http://、https:// 、git://、ssh协议

二、文件状态

现在我们在本地已经有了一个仓库

|

1

|

git status

|

这将列出当前文件夹下的文件状态
包括所处分支、已修改文件、未修改文件、未跟踪文件、未提交文件

|

1
2
3
4
5
6
7
8
9
10
11

|

git status
位于分支 master

尚无提交

要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: README.md
新文件: file1.c
新文件: file2.c
新文件: file3.c

|

如果觉得这样输出太复杂不够简练,加上-s 或-short 参数,获取更简练的输出

|

1
2
3
4
5
6

|

git status -s
A README.md
A file1.c
A file2.c
A file3.c
?? file4.c

|

输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。
**新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 **

三、commit 提交修改,建立快照

上面看到,我的目录下有三个已跟踪文件个文件未被提交,另有一个文件未被跟踪,未被跟踪的文件不会被记录,但是会在每一次运行status命令时列举出来。

如果你不想将某些文件加入跟踪列表,也不想每一次都让git把这些文件IE局出来提醒你例如调试编译产生的二进制文件和测试文件,你可以使用忽略文件。忽略文件的使用将在后面进行介绍。

1、直接提交

使用

|

1

|

git commit

|

进行一次提交,一般情况。git会跳出在前面配置环境里面配置的文本编辑器,要求你输入本次提交打的修改说明。如果没有配置,将会弹出系统默认编辑器。
确认之后,git将会把index(暂存区)的修改建立一次快照,将其加入版本控制中。对于没有使用add命令添加到暂存区的文件,将不会被记录。

如果你想将所有修改,不论是否已加入暂存区的修改都建立快照。

2、跳过使用暂存区域 直接commit

只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

三、忽略文件

我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。
来看一个实际的 .gitignore 例子:

|

1
2
3

|

$ cat .gitignore
*.[oa]
*~

|

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就为你的新仓库设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。

  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

  • 匹配模式可以以(/)开头防止递归。

  • 匹配模式可以以(/)结尾指定目录。

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

我们再看一个 .gitignore 文件的例子:

|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

|

# 忽略所有的 .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

|

GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表, 你可以在 https://github.com/github/gitignore 找到它。

tips

在最简单的情况下,一个仓库可能只根目录下有一个 .gitignore 文件,它递归地应用到整个仓库中。 然而,子目录下也可以有额外的 .gitignore 文件。子目录中的 .gitignore 文件中的规则只作用于它所在的目录中。 (Linux 内核的源码库拥有 206 个 .gitignore 文件。)

四、删除命令

|

1

|

git rm

|

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是 未暂存清单)看到。

如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删尚未添加到快照的数据,这样的数据不能被 Git 恢复。

另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 –cached 选项:

五、移动或重命名文件

|

1

|

git mv

|

要在 Git 中对文件改名,可以这么做:

|

1

|

$ git mv file_from file_to

|

其实,运行 git mv 就相当于运行了下面三条命令:

|

1
2
3

|

$ mv README.md README
$ git rm README.md
$ git add README

|

Github

Author: 哒琳

Permalink: http://blog.jieis.cn/2020/0b382335-4bf1-4c63-8e8f-0bfe8aacecd1.html

posted @ 2020-07-16 23:24  哒啉  阅读(123)  评论(0编辑  收藏  举报