Git基础

获取Git仓库

创建Git仓库的方法主要有两种:一是将现有的项目或者目录导入Git中,二是从服务器上Clone到现有的Git库

初始化版本库

可以理解为一个由Git进行管理和可追踪的文件目录,其中的每个文件的修改、删除,Git都可以追踪并能在将来某时刻“还原”。

创建一个空目录:

$ cd d/documents
$ mkdir GitRoot
$ cd gitroot
$ pwd
/d/documents/gitroot

注意为了避免各种码放,你创建目录的时候尽量不要使用中文,包括父项和子项
通过git init命令将这个目录变成Git可以管理的仓库;

$ git init
Initialized empty Git repository in D:/Documents/GitRoot/.git/

对于一个已经非空文件夹,你应该开始追踪这些文件并进行初始提交。通过git add命令来指定所需的文件来进行追踪,然后执行git commit

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

克隆现有的仓库

获得一份已经存在了的Git仓库的拷贝需要用到git clone 命令。 如果你对请留心一下你所使用的命令 是"clone"而不是"checkout"。这是 Git 区别于其它版本控制系统的一个重要特性,Git克隆的是该Git仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要文件。当你执行git clone命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版都将被拉取下来。

事实上,如果你的服务器的磁盘坏掉了,你通常可以使用任何一个克隆下来的用户端来重建服务器上的仓库 (虽然可能会丢失某些服务器端的钩子(hook)设置,但是所有版本的数据仍在)。

命令是:git clone <url>比如,要克隆 Git 的链接库 libgit2,可以用下面的命令:

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

这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 libgit2 文
件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。

如果你想在克隆的时候自定义本地仓库的名字,可以通过额外的参数进行指定

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

Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用SSH 传输协议,比如user@server:path/to/repo.git 。 在服务器上搭建 Git 将会介绍所有这些协议在服务器端如何配置使用,以及各种方式之间的利弊。

记录变更

现在我们有一个Git仓库,里面每一个文件有两种状态:已追踪和未追踪。工作之后,则可能是:未修改,已修改或已放入暂存区。已追踪的文件就是Git已知的文件。初次克隆之后的文件都属于已追踪文件。

编辑某些文件之后,标记为已修改文件,工作的时候可以选择将它们放入暂存区,然后提交对于所有暂存的修改,如此反复。

UntrackedUnmodifiedModifiedStaged...Edit the fileStage the fileCommitRemove the fileAdd the fileUntrackedUnmodifiedModifiedStaged文件状态变化周期
未追踪未修改已修改暂存的状态描述...文件编辑存储文件提交文件移出文件添加文件未追踪未修改已修改暂存的文件状态变化周期(zh)

检查当前文件状态

命令和界面一览

使用git status命令查看那些文件处于什么状态

  1. 没有任何文件时:

    $ git status
    On branch master
    
    No commits yet
    
    nothing added to commit but untracked files present (use "git add" to track)
    
  2. 有文件的时候出现:

    $ echo 'My Project' > README
    $ git status
    On branch master
    
    No commits yet
    
    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之前的快照中也没有这些文件

  3. 克隆一个仓库后立刻使用该命令:

    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working directory clean
    

    说明当前所有文件都未被修改,且目录下面没有任何追踪文件出现

跟踪新文件

使用git add <file>开始跟踪一个文件,此时再运行git status可以看

$ git add README
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README

这说明README已经被跟踪,并且处于暂存状态:

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

暂存已修改的文件

再次创建文本并修改

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

$ git statusOn branch masterChanges to be committed:  (use "git restore --staged <file>..." to unstage)        new file:   READMEChanges not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git restore <file>..." to discard changes in working directory)        modified:   B.md

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

$ git statusOn branch masterChanges to be committed:  (use "git restore --staged <file>..." to unstage)        new file:   B.md        new file:   README        

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

$ vim B.md$ git statusOn branch masterChanges to be committed:  (use "git restore --staged <file>..." to unstage)        new file:   B.md        new file:   READMEChanges not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git restore <file>..." to discard changes in working directory)        modified:   B.md

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

$ git add B.md$ git statusOn branch masterChanges to be committed:  (use "git restore --staged <file>..." to unstage)        new file:   B.md        new file:   README

这里如果遇到vi或者vim的问题可以参考一下,vi编辑器的简要使用手册

状态简览

使用命令git status -s或者你将得到一种格式更为紧凑的输出

$ git status -sA  B.mdA  README?? "Any.md"?? CodeNote/?? CodeZero/

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。

忽略文件(略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值