Git又称作 vesion control system
是一个版本控制系统,当我们在做一个project、files的时候,可以由多人,不同地点,不同时间去编辑同一个file。
而他也可以有不同的Branch
(分支),也就是有不同的开发线,而主Branch
又称作master branch
,比如每个人在同一个file去做複製贴上出一个新的file,利用这个新的file去做edit,此动作可避免影响到初始file,完成后再利用merge
去做合併,让所有人都可以去修改同一个file。
且我们可以查询到所有人修改的纪录
(包括自己),这个修改是谁做的?为什么这个人这样做?什么时候做的?
而Git主要可以分为三个区块:
工作目录(Working Directory
)」、「暂存区(Staging Area
)」以及「储存库(Repository
)。
Working Directory:就是我们在local正在操作的东西,在这个区块的东西,尚未保存,故较容易修改以及删除。
Staging Area:也是在local,且是我们想保存下来的东西,并準备要传送至Repositroy储存库。
Repository:就是每次提交(commit)版本放置的区域。
而我们在Working Directory需透过git add
指令才能将file从工作目录移至暂存区(or call index)。
而在Staging Area需透过git commit
指令把暂存区的内容移至储存库。
大致上是这么一个流程
如下图:
而这里有几个Git常用的command:
pwd:可显示当前目录路径
cd:到指定路径,如cd D:\
cd .. :可回到上一层目录
code .:到指定路径下的资料夹并快速开启vs code。
touch:能够新建档案。
mkdir:用来新建资料夹。
rm:用来删除档案或资料夹。
echo:可将字串输出至指定文件 ex:echo "test test" > test.txt
cat:可查找指定资料的内容 ex:cat test.txt
vim:可开启指定路径的档案,开启后,按下i进行编辑,要退出时,按下ESC并加上:wq即可
git config --global(user.name , user.email):在每次使用git进行版本管理时,送出修改的纪录,告诉git我是谁,如何联繫我,也让别人在操作时,知道这是谁修改的。
而输入完成后,在C槽=>USER下就可发现已新增一个名为.gitconfig的file,利用vscode打开,
即可显示我们所输入的资料。
git config -l:可查看当前配置如user.name,email等。
git init (资料夹名称):初始化代码仓库。一般情况不会去更动.git里面的文件
。
ls -la:可在初始化代码仓库下,看到ls看不到的资料,此处-开头的为file其余为folder。
find ./ -[i]name jojo.txt:find可寻找特定档案,例如找寻档名为 jojo.txt 的档案。i 表示不分大小写。
git add:可将指定要commit的文件储存到git中的Index资料夹,也就是我们staging area中
git add * 可全部都储存,git add test.txt test2.txt 加上空格可一次储存多个。git add *:不会添加.开头的档案 ex: .gitignore,所以要直接 git add .gitignore
.git/index(此非command而为路径):通过git add保存当前对文件或资料夹的改变,并储存到index,一次只会储存一个改变,而去commit,他就只会送出这个改变,也就是我们的index。
而透过find查询.git下的file多了一个为index的folder,就是用来储存我们的修改,
git status:查询当前档案状态。
透过git status发现,如果有git add进去修改的资料,会显示 new file : test2.txt,如果只有创建或改变但还没有git add进去会显示 modified : test1.txt 代表不会送出修改后的资料。
查询出修改后但还没git add进去还在working directory的文件(下图)
已经git add进去準备commit的file(下图)。
git log:可以查询commit的纪录。
git log --stat:详情显示commit 纪录。
git log --after/before = "2020-06-30": 可查询指定日期之前或之后的纪录。
git commit:可送出我们所改变的资料,而在后面加上-m,git commit -m "add line 3" 可附加讯息,来说明这次送出的东西是什么,使用 git log去查询 commit history,有HEAD的纪录为最新的纪录。