使用git就是将本地文件(工作目录workspace)的文件,添加到暂存区(stage),然后提交到本地仓库(repository),最终可以协同开发,推送到远程仓库(remote)
git版本库,也叫做git仓库(repository),也就是一个文件夹。
这个目录的所有内容被git软件管理,所有的修改,删除,git都会跟踪记录,便于可以跟踪历史记录,以后可以还原文件。
两种场景需求:
1.把已有的项目代码,纳入git管理
cd mysite mysite项目所在代码
git init 初始化git仓库
git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。
此步仅仅是初始化,此时项目里的代码还没有被git跟踪,因此还需要git add对项目文件跟踪,然后git commit提交到本地仓库
想知道.git文件做了什么事,请看git原理 >Git 内部原理
2.新建一个项目,直接用git管理
cd 某个文件夹
git init mysite 此步会在当前路径创建mysite文件夹,mysite文件夹中包含了.git的初始化文件夹,所有配置
那么.git文件夹中有什么呢?
[root@pyyuc ~/git_learning/mysite 11:08:19]#tree .git
.git
├── branches
├── config 这个项目独有的配置
├── description
├── HEAD head文件指示目前被检出的分支
├── hooks hooks目录包含服务端和客户端的钩子脚本 hook scripts
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件
├── info info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns)
│ └── exclude
├── objects 存储所有数据内容
│ ├── info
│ └── pack
└── refs refs目录存储指向数据(分支)的提交对象的指针
├── heads
└── tags
3.获取远程仓库代码
如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。
git clone https://github.com/django/django.git
你会发现所有的项目文件都在这里,等待后续开发。
还记得git的四个区域吗?本地文件夹,暂存区,本地仓库,远程仓库吗?
本地文件夹未初始化,git是不认识的
本地文件git init后,就成了git仓库
请记住,在工作文件夹的每一个文件,只有两种状态,一个是未跟踪,一个是已跟踪
已跟踪的指的是已经被纳入git版本管理的文件,在git快照中有他的记录
未跟踪的是这个文件既不在git快照中,也不在暂存区
git init初始化时的工作文件夹,都属于已跟踪了,后续的编辑操作都会标记为,已修改文件,因此需要将修改后的文件,加入暂存区,然后提交暂存区的文件。
git status
此命令查看git工作目录的文件,处于生命周期的哪一个状态 注意,只能在git工作目录中输入这个命令,他会去找.git文件夹
请看代码
git init mysite 初始化git仓库
git status 查看git状态
echo 'print("挣了一个亿")' > main.py 新建一个代码文件,此时是未被git跟踪的
git status 查看状态
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
main.py
nothing added to commit but untracked files present (use "git add" to track)