linux上搭建git服务器之2(git基础操作)
Posted 狂奔的CD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux上搭建git服务器之2(git基础操作)相关的知识,希望对你有一定的参考价值。
文章目录
正文
参考 https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93
1 获取 Git 仓库
通常有两种获取 Git 项目仓库的方式:
将尚未进行版本控制的本地目录转换为 Git 仓库;
从其它服务器 克隆 一个已存在的 Git 仓库。
1-1 普通目录初始化为git仓库
$ cd /home/user/my_project
$ git init
Initialized empty Git repository in /xxx/.git/
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
创建初始化版本
$ git add *.c
$ git add LICENSE
$ git commit -m ‘initial project version’
1-2 克隆 一个已存在的 Git 仓库
$ git clone https://github.com/libgit2/libgit2
Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。
2 记录每次更新到仓库
https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93
2-1 基础操作
增: git add xxx
git add * (添加全部,除了.gitignore中忽略的文件)
删: git rm xxx
查:git status
git status -s (简化输出)
提交 : git commit
2-2 ignore 忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。
我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。
文件 .gitignore 的格式规范如下:
所有空行或者以 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配(正则表达式),它会递归地应用在整个工作区中。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
一个栗子:
# 忽略所有的 .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
在最简单的情况下,一个仓库可能只根目录下有一个 .gitignore 文件,它递归地应用到整个仓库中。 然而,子目录下也可以有额外的 .gitignore 文件。子目录中的 .gitignore 文件中的规则只作用于它所在的目录中。
2-3 查看差异
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff:
$ git diff
若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令
$ git diff --staged
2-4 移动文件
$ git mv file1 file2
相当于执行了
$ mv README.md README
$ git rm README.md
$ git add README
2-5 查看提交历史
参考 https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
$ git log -p -2
-p 或 --patch ,它会显示每次提交所引入的差异,-2 选项来只显示最近的两次提交
$ git log --stat
–stat 选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。
git log --pretty=oneline(oneline/short /full / fuller )
git log --pretty=format:"%h - %an, %ar : %s"
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
类似 --since 和 --until 这种按照时间作限制的选项很有用。 例如,下面的命令会列出最近两周的所有提交:
$ git log --since=2.weeks
Table 3. 限制 git log 输出的选项
选项 说明
-<n> 仅显示最近的 n 条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。
eg:一个实际的例子,如果要在 Git 源码库中查看 Junio Hamano 在 2008 年 10 月其间, 除了合并提交之外的哪一个提交修改了测试文件,可以使用下面的命令:
$ git log --pretty="%h - %s" --author=‘Junio C Hamano’ --since=“2008-10-01”
–before=“2008-11-01” --no-merges – t/
2-6 撤销操作
1)
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
$ git commit --amend
例如:
$ git commit -m ‘initial commit’
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交——第二次提交将代替第一次提交的结果。
2)取消暂存的文件
使用 git reset HEAD … 来取消暂存。 所以,我们可以这样来取消暂存 CONTRIBUTING.md 文件:
$ git reset HEAD CONTRIBUTING.md
3)撤消对文件的修改
git checkout – CONTRIBUTING.md
以上是关于linux上搭建git服务器之2(git基础操作)的主要内容,如果未能解决你的问题,请参考以下文章