0


Git(四):远程仓库的搭建、获取与更新

1、搭建远程仓库

1.1 github 创建 Repository

在 github.com 中通过

New repository

创建仓库

git-demo

,只输入了仓库名称,其他均为默认值,未进行设置。

2、获取远程仓库

有两种取得 Git 项目仓库的方法。
  1. 从一个服务器克隆一个现有的 Git 仓库;
  2. 在现有项目或目录下导入所有文件到 Git 中。

2.1 克隆现有的仓库

如果想获得一份已经存在了的 Git 仓库的拷贝,就需要用到命令 
git clone

而非

git checkout

,这是区别于其他版本控制系统的一个重要特性,Git 克隆的是该仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需文件,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

git clone https://github.com/**/git-demo1024.git

远程克隆时,自定义本地仓库名字 【 git-demo 】:

git clone https://github.com/**/git-demo1024.git git_pratice1024

// 指定拉取 branch 分支下的代码
$ git clone -b branch [email protected]:**/git-demo0823.git

2.2 在现有目录中初始化仓库

如果不克隆现有的仓库,而是打算使用 Git 来对现有的项目进行管理。
git init

该命令将创建一个名为

.git

的子目录,该目录还有初始化的 Git 仓库中所有的必须文件,这些是仓库的骨干,但仅仅是初始化,项目里的文件还没有被跟踪。

如果是在一个已经存在文件的文件夹(非空文件夹)中初始化 Git 仓库来进行版本控制的话,应该开始跟踪这些文件并提交。

通过 
git add

实现对指定文件的跟踪,然后

git commit

提交,假设在目录

E:\MarkText\.git

中有文件需要跟踪(版本控制),这样即得到了一个实际维护(跟踪)着若干个文件的 Git 仓库。

git add C、C++/C/C\ 标准库.md
git commit -m 'initial markdown version'

3、更新提加到仓库

3.1 记录每次更新到仓库

建立好了现有的 Git 仓库(git-demo1024.git),并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。

工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。

已跟踪的文件:被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。

初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态

未跟踪文件:既不存在于上次快照的记录中,也没有放入暂存区。

编辑过某些文件之后,由于自上次提交后对它们做了修改,Git 将它们标记为已修改文件。我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。

生命周期如下:

3.2 检查当前文件状态

git status

命令查看哪些文件处于什么状态:

// 获取文件状态
git status

说明所有已跟踪文件在上次提交后未被更改过。此时,还表明了当前目录下没有出现任何处于未跟踪状态的新文件,同时显示,当前所在分支同远程服务器上对应的分支没有偏离,默认分支名 
master

在项目下创建一个新的 
mytext.txt

文件。 如果之前并不存在这个文件,使用

git status

命令,将看到一个新的未跟踪文件:

// 编写并写入
echo 'my first Git control file' > mytext.txt
git status

在之前的快照(提交)中没有这些文件:Git 不会自动将之纳入跟踪范围。

3.3 跟踪新文件

使用命令

git add

开始跟踪一个文件,

再运行

git status

命令,会看到

mytext.txt

文件已被跟踪,并处于暂存状态:

// 跟踪文件
git add mytext.txt
git status

显示在 Changes to be committed 下面的文件,就说明是已暂存状态。

3.3.1 查看跟踪的文件

$ git ls-tree -r master --name-only

3.4 暂存已修改文件

  1. 修改一个已被跟踪的文件,打开文件 mytext.txt,命名为 remind.md并编辑其中的内容,然后运行 git status 命令:

显示在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行

git add

命令。

git add

是个多功能命令【添加内容到下一次提交中】:

  • 可以用它开始跟踪新文件;

  • 把已跟踪的文件放到暂存区;

  • 合并时把有冲突的文件标记为已解决状态等。

    1. 运行
git add

将“

remind.md

”放到暂存区,然后再看看

git status

的输出:

git add remind.md
git status
  1. 现在两个文件都已暂存,下次提交时就会一并记录到仓库。此时我们再进行编辑文件内容并检查状态:

现在 
remind.md

同时出现在暂存区和非暂存区。实际上 Git 只是暂存了运行

git add

时的版本, 如果现在提交,

remind.md

的版本是最后一次运行

git add

命令时的那个版本,而不是运行

git commit

时,在工作目录中的当前版本。

当运行

git add

过后又作了文件修订,需要重新

git add

暂存最新版本。

3.5 状态简览

git status

输出十分详细,但有些繁琐。 使用

git status -s

git status --short

命令,将得到一种更为紧凑的格式输出。 运行

git status -s

,状态报告输出如下:

$ git status -s
 M README.md
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
AD mytext.txt
?? LICENSE.txt

标记:

  • ?? : 新添加的未跟踪文件;
  • A : 新添加到暂存区中的文件;
  • M : 修改过的文件;
  • D : 删除过的文件;
  • MM :在右边的 M 表示该文件被修改了但是还没放入暂存区,在靠左边的 M 表示该文件被修改了并放入了暂存区。

3.6 忽略文件

一般总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。

在这种情况下,我们可以创建一个名为

.gitignore

的文件,列出要忽略的文件模式:

$ cat .gitignore
*.[oa]
*~
  1. 忽略 .o 或者 .a 结尾的文件(编译过程中出现的类对象文件和存档文件);
  2. 忽略以 ~ 波浪符结尾的文件(副本文件);
  3. 可能还需要忽略 logtmp 或者 pid 目录,以及自动生成的文档等等;

文件

.gitignore

规范如下:

  • 所有空行或者以 # 开头的行会被 Git 忽略;
  • 可以使用标准的 glob 模式匹配;
  • 匹配模式可以以 / 开头防止递归;
  • 匹配模式可以以 / 结尾指定目录;
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号 ! 取反。

glob 模式:shell 模式所使用的简化了的正则表达式;

  • * :匹配零个或多个字符;
  • [] :匹配任何一个列在方括号中的字符;
  • ? :匹配一个任意字符;
  • [ - ] :所有在这两个字符范围内的都可以匹配;( [a-z] )
  • ** :匹配任意中间目录

3.7 查看已暂存和未暂存的修改

当前做的哪些更新还没有暂存? 有哪些更新已经暂存起来准备好了下次提交?

尽管

git status

已经通过在相应栏下列出文件名的方式回答了这个问题,

git diff

将通过文件补丁的格式显示具体哪些行发生了改变。

修改文件后,先不暂存,运行 
git status

要查看尚未暂存的文件更新了哪些部分,不加参数输入 
git diff

git diff

本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。

绿色 + 号:表示添加;

红色 - 号:表示删除。

git diff --cached

查看已经暂存起来的变化:(

--staged

)

通过图形化的方式或其它格式输出方式的话,可以使用

git difftool

命令来用

Araxis

emerge

vimdiff

等软件输出

diff

分析结果。

使用

git difftool --tool-help

命令来看你的系统支持哪些

Git Diff

插件。

3.8 提交更新

准备提交前,先用 
git status

看下,是不是都已暂存起来了,如果没有暂存起来则要先使用命令:

git add .

将所有文件暂存起来, 然后再运行提交命令

git commit

$ git status
$ git add .
$ git commit

这种方式会启动文本编辑器以便输入本次提交的说明。

默认会启用 shell 的环境变量

$EDITOR

所指定的软件,一般都是

vim

emacs

使用

git config --global core.editor

命令设定自定义编辑软件。

可以在

commit

命令后添加

-m

选项,将提交信息与命令放在同一行,如下所示:

$ git commit -m "1025 10:15 commit info"
[main (root-commit) 57cc4a2] 1025 10:15 commit info
 2 files changed, 2 insertions(+)
 create mode 100644 mytext.txt
 create mode 100644 remind.md
提交后会显示,当前是在哪个分支(
main

)提交的,本次提交的完整 SHA-1 校验和是什么(

57cc4a2

),以及在本次提交中,有多少文件修订过,多少行添加和删改过。

提交时记录的是放在暂存区域的快照。

任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。

每一次运行提交操作,都是对你项目作一次快照,之后可回到这个状态,或者进行比较。

3.9 跳过使用暂存区域

在提交的时候,给 
git commit

加上

-a

,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过

git add

步骤:

$ git commit -a -m 'skip command submission 1025 10:30'

3.10 移除文件

从 Git 中移除文件,就必须要从已跟踪文件清单中移除(准确来说是在暂存区中),然后 commit 。通过 
git rm

连同从工作目录中删除文件,之后也不会重新出现在未跟踪文件清单里了。

  • 手工移除文件时,git status 时会显示:
Changes not staged for commit // 未暂存清单
下次 commit 则该文件就不会再纳入版本管理了。
  • 移除文件之前,若修改过且也已经放到暂存区了,则必须使用强制移除选项 -f (force),这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 git 恢复。
  • 从暂存区移除文件时,(忘记添加 .gitignore 文件)若希望保留在当前工作目录,即文件保留在磁盘,且不想让 Git 继续跟踪,使用 --cached 选项:
# 仅仅删除暂存区的文件
$ git rm --cached mytext.txt
# 删除工作区和暂存区中的文件
$ git rm -r mytext.txt
git rm

后面可以列出文件或指定目录,也可以使用 glob 模式:

# 文件模式扩展匹配方式,删除所有 .log 文件
$ git rm log/\*.log
# 移除 ~ 结尾的文件
$ git rm \*~

3.11 移动文件

不比其他的 VCS 系统,Git 并不显示跟踪文件的移动操作,如果在 Git 中重命名了某个文件,仓库中存储的元数据并不体现这是一次重命名操作。
  • 文件重命名:
$ git mv file_from file_from2

# 相当于运行以下命令:
$ mv README.md README
$ git rm README.md
$ git add README
标签: git github

本文转载自: https://blog.csdn.net/weixin_43718346/article/details/129999168
版权归原作者 belien 所有, 如有侵权,请联系我们删除。

“Git(四):远程仓库的搭建、获取与更新”的评论:

还没有评论