美文网首页
2.Git-获取仓库

2.Git-获取仓库

作者: mr_young_ | 来源:发表于2017-04-07 20:50 被阅读31次

1.获取仓库

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

1.1 在现有项目中初始化仓库

如果你打算使用Git来对夏安有的项目进行管理,你只需要进入该项目目录并输入:

$ git init

该命令将创建一个名为.git的子目录,这个字目录含有你初始化的Git仓库中所有的必须文件,这些文件是Git仓库的骨干。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
如果你是在一个已经存在文件的文件夹(而不是空文件夹)中初始化Git仓库来进行版本控制的话,你应该开始跟踪这些文件并提交。你可通过git add命令来实现对指定文件的跟踪,然后执行git commit提交:

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
1.2 科隆现有的仓库

如果你想获得一份已经存在了的Git仓库的拷贝,比如说,你想为某个开源项目贡献一份力,这时就要用到git clone命令。Git克隆的是该Git仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要文件。当你执行git clone命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来。事实上,如果你的服务器的磁盘坏掉了,你通常可以使用任何一个克隆下来的用户端来重建服务器上的仓库。
克隆仓库的命令格式是git clone [url]。比如,要克隆Git的链接库libgit2,可以用下面的命令:

$ git clone https://github.com/libgit2/libgit2

这会在当前目录下床看一个名为“libgit2”的目录,并在这个目录下初始化一个.git文件夹,从远程仓库拉取下所有数据放入.git文件夹,然后从中读取最新版本的文件的拷贝。如果你进入到这个新建的gitlib2文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用如下命令:

$ git clone https://github.com/libgit2/libgit2 mylibgit

这将执行与上一个命令相同的作用,不过在本地创建的仓库名字变为mylibgit
Git支持多种数据传输协议。上面的例子使用的是https://协议,不过你也可以使用git://协议或者食用SSH传输协议,比如user@server:path/to/repo.git

2. 记录每次更新到仓库

现在我们手上有了一个真实项目的Git仓库,并从这个仓库中取出了序哦呦文件的工作拷贝。接下来,对这些文件做些修改,在完成了一个阶段的目标之后,调本次更新到仓库。
请记住,你工作目录下的每一个文件都不外乎两种状态:已跟踪或未跟踪。已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。工作目录中除已跟踪文件以外的所有其它文件都属于为跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
编辑过某些文件之后,由于自上次提交后你对他们做了修改,Git将它们标记为修改文件。我们逐步将这些修改过的文件放入暂存区,然后提交所哦呦暂存了的修改,如此反复。所以使用Git时文件的生命周期如下:


文件的状态变化周期
2.1 检查当前文件状态

要查看那些文件处于什么状态,可以用git status命令。如果在克隆仓库后立即使用此命令,会看到类似这样的输出:

$ git status
On branch master
nothing to commit, working directory clean

这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。 此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 Git 会在这里列出来。 最后,该命令还显示了当前所在分支,并告诉你这个分支同远程服务器上对应的分支没有偏离。 现在,分支名是 “master”,这是默认的分支名。
现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:

$ echo 'My Project' > README
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    README

nothing added to commit but untracked files present (use "git add" to track)

在状态报告中可以看到新建的 README 文件出现在Untracked files下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”, 这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来。 不过现在的例子中,我们确实想要跟踪管理 README 这个文件。

2.2 跟踪新文件

使用命令git add开始跟踪一个文件。 所以,要跟踪 README 文件,运行:

$ git add README

此时再运行git status命令,会看到 README 文件已被跟踪,并处于暂存状态:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

只要在Changes to be committed这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。 你可能会想起之前我们使用git init后就运行了git add (files) 命令,开始跟踪当前目录下的文件。git add命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

2.3 暂存已修改文件

现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 CONTRIBUTING.md 的已被跟踪的文件,然后运行 git status 命令,会看到下面内容:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

文件CONTRIBUTING.md出现在Changes not staged for commit这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。 要暂存这次更新,需要运行git add命令。 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。 现在让我们运行git add将"CONTRIBUTING.md"放到暂存区,然后再看看git status的输出:

$ git add CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

现在两个文件都已暂存,下次提交时就会一并记录到仓库。 假设此时,你想要在CONTRIBUTING.md里再加条注释,重新编辑存盘后,准备好提交。 不过且慢,再运行git status看看:

$ vim CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

现在CONTRIBUTING.md文件同时出现在暂存区和非暂存区。 这怎么可能呢? 好吧,实际上 Git 只不过暂存了你运行git add命令时的版本, 如果你现在提交,CONTRIBUTING.md 的版本是你最后一次运行git add命令时的那个版本,而不是你运行git commit时,在工作目录中的当前版本。 所以,运行了git add之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:

$ git add CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md
2.4 状态简览

git status命令的输出十分详细,但其用语有些繁琐。 如果你使用git status -s命令或git status --short命令,你将得到一种更为紧凑的格式输出。 运行git status -s,状态报告输出如下:

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

相关文章

  • 2.Git-获取仓库

    1.获取仓库 有两种取得Git项目仓库的方法:第一种是在现有项目或目录下导入所有文件到Git中;第二种是从一个服务...

  • 仓库

    仓库 1、获取仓库信息 获取仓库信息需要仓库拥有者帐号和仓库名,且该仓库已设置响应事件,未设置响应事件是无法访问的...

  • Docker镜像常用命令

    获取镜像 获取指定版本的镜像 获取最新镜像 如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址: 查看镜...

  • Git-第二章节-指令

    指令 1.1 获取仓库1.2 文件更新到仓库1.3 获取提交历史1.4 撤销修改1.5 远程仓库1.6 标签 1....

  • 构建

    构建 1、获取仓库构建信息 获取仓库构建信息需要仓库拥有者帐号和仓库名。 若该公共仓库已设置响应事件,是不需要用户...

  • 获取 Git 仓库

    获取 Git 仓库 通常有两种获取 Git 项目仓库的方式: 将尚未进行版本控制的本地目录转换为 Git 仓库; ...

  • 学习Java的第一天

    1 java1.8->Java开发环境 2.git->分布式代码管理工具 ...

  • docker学习——使用docker镜像

    1.获取镜像 docker pull NAME[:TAG] -a:是否获取仓库中的所有镜像 如果从非官方的仓库...

  • 获取 Git 仓库

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

  • git 将本地项目推送到远端仓库

    获取远端仓库地址 在远端创建一个空的项目仓库,并获取仓库地址 本地项目推送到远端 出现的问题 出现下面问题:fat...

网友评论

      本文标题:2.Git-获取仓库

      本文链接:https://www.haomeiwen.com/subject/keohattx.html