赞
踩
什么是仓库?
仓库是进行版本控制的一个文件目录,我们要想对文件进行版本控制,就必须先创建一个仓库。
如何创建仓库?
创建一个Git本地仓库的对应命令为git init
,注意命令要在文件目录下执行,例如:
[ycm@hcss-ecs-3ddc 2023_11_22]$ git init Initialized empty Git repository in /home/ycm/code/git/2023_11_22/.git/ [ycm@hcss-ecs-3ddc 2023_11_22]$ [ycm@hcss-ecs-3ddc 2023_11_22]$ ll -la total 12 drwxrwxr-x 3 ycm ycm 4096 Nov 21 21:13 . drwxrwxr-x 4 ycm ycm 4096 Nov 21 21:13 .. drwxrwxr-x 7 ycm ycm 4096 Nov 21 21:13 .git
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注意:这里我们可以看到,当前目录多了一个.git
的隐藏目录,.git
目录是Git来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
当安装 Git 后⾸先要做的事情是设置你的 用户名称
和 e-mail 地址
,这是⾮常重要的。配置命令为:
[ycm@hcss-ecs-3ddc 2023_11_22]$ git config user.name ycm [ycm@hcss-ecs-3ddc 2023_11_22]$ git config user.email 123@qq.com [ycm@hcss-ecs-3ddc 2023_11_22]$ git config -l core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true user.name=ycm user.email=123@qq.com
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
其中 --global
是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的 Git 仓库都会使⽤这个配置。如果你希望在不同仓库中使⽤不同的 name
或 e-mail
,可以不要 --global
选项,但要注意的是,执⾏命令时必须要在仓库⾥。
查看配置命令为:
git config -l
- 1
删除对应的配置命令为:
git config [--global] --unset user.name git config [--global] --unset user.email
- 1
- 2
工作区:是在你电脑上写代码或者文件的目录
暂存区:英文叫stage或index。一般存放在.git
目录下的index文件(.git/index)中,我们把暂存区有时也叫作索引(index)。
版本库:又叫仓库,工作区有一个隐藏目录.git
,它不算工作区,而是Git的版本库。这个版本库里面所有的文件都可以被Git管理起来,每个文件的修改、删除,Git都可能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
下图展示了工作区、暂存区和版本库之间的关系:
图中左侧为⼯作区,右侧为版本库。Git 的版本库⾥存了很多东西,其中最重要的就是暂存区。
在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫 HEAD。(分⽀和HEAD的概念后⾯再说)
当对⼯作区修改(或新增)的⽂件执⾏ git add
命令时,暂存区⽬录树的⽂件索引会被更新。
当执⾏提交操作 git commit
时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中。
由上述描述我们便能得知:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤ git add
和 git commit
命令才能将⽂件添加到仓库中进⾏管理!!!
在包含 .git 的⽬录下新建⼀个 ReadMe ⽂件,我们可以使⽤ git add 命令可以将⽂件添加到暂存区:
添加⼀个或多个⽂件到暂存区: git add [file1] [file2] ...
添加指定⽬录到暂存区,包括⼦⽬录: git add [dir]
添加当前⽬录下的所有⽂件改动到暂存区: git add .
再使⽤ git commit 命令将暂存区内容添加到本地仓库中:
git commit -m "message"
git commit [file1] [file2] ... -m "message"
注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由⽤⼾⾃⼰完成,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。
例如:
[ycm@hcss-ecs-3ddc 2023_11_22]$ touch ReadMe
[ycm@hcss-ecs-3ddc 2023_11_22]$ vim ReadMe
[ycm@hcss-ecs-3ddc 2023_11_22]$ cat ReadMe
#include<stdio.h>
int main()
{
printf("hello Git\n");
return 0;
}
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add ReadMe
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "commit my first file"
[master (root-commit) 67c1444] commit my first file
1 file changed, 6 insertions(+)
create mode 100644 ReadMe
git commit
命令执⾏成功后会告诉我们,1个⽂件被改动(就是我们新添加的ReadMe⽂件),插⼊了两⾏内容(ReadMe有两⾏内容)。
我们还可以多次 add 不同的⽂件,⽽只 commit ⼀次便可以提交所有⽂件,是因为需要提交的⽂件是通通被 add 到暂存区中,然后⼀次性 commit 暂存区的所有修改。如:
[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file1 file2 file3 file4 file5
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file1 file2
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file3 file4 file5
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "add 5 files"
[master efccdbd] add 5 files
5 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
create mode 100644 file2
create mode 100644 file3
create mode 100644 file4
create mode 100644 file5
截止目前为止,我们已经可以将代码提交到本地仓库了。现在我们可以使用git log
命令来查看历史提交记录:
[ycm@hcss-ecs-3ddc 2023_11_22]$ git log
commit efccdbd877c0323c3752f02d31fbc7da5ef2ad77
Author: ycm <123@qq.com>
Date: Wed Nov 22 00:48:01 2023 +0800
add 5 files
commit 67c1444e499f63a4475128ca84f5849c80abe7b1
Author: ycm <123@qq.com>
Date: Wed Nov 22 00:43:34 2023 +0800
commit my first file
如果嫌输出消息太多,可以试试加上--pretty=oneline
参数:
[ycm@hcss-ecs-3ddc 2023_11_22]$ git log --pretty=oneline
efccdbd877c0323c3752f02d31fbc7da5ef2ad77 add 5 files
67c1444e499f63a4475128ca84f5849c80abe7b1 commit my first file
需要说明的是,我们看到一大串类似于efccdbd8…a5ef2ad77的是每次提交的commit id
(版本号),Git 的 commit id
不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)。
学习到这⾥,我们已经清楚了如何向仓库中添加⽂件,并且对于⼯作区、暂存区、版本库也有了⼀定的认识。那么我们再展⽰⼀种添加⽂件的场景,能加深对⼯作区、暂存区、版本库的理解,⽰例如下:
[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file6
[ycm@hcss-ecs-3ddc 2023_11_22]$ git add file6
[ycm@hcss-ecs-3ddc 2023_11_22]$ touch file7
[ycm@hcss-ecs-3ddc 2023_11_22]$ git commit -m "add file"
[master c148d17] add file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file6
提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-) ,意思是只有⼀个⽂件改变了,这时我们提出了疑问,不是新增了两个⽂件吗?再来回忆下,git add
是将⽂件添加到暂存区, git commit
是将暂存区的内容添加到本地仓库中。由于我们并没有使⽤ git add
file5 ,file5 就不在暂存区中维护,所以我们 commit
的时候其实只是把已经在暂存区的 file4 提交了,⽽遗漏了⼯作区的 file5。如何提交 file5 呢?很简单,再次add
, commit
即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。