Git理论
Git本地有三个工作区域和一个远程仓库:
- 工作目录(Working Directory)
- 暂存区(Stage/Index)
- 资源库(Repository或Git Directory)
- 远程仓库(Remote Directory)
如图:
-
Working Directory:工作区,平时存放项目代码的地方。
-
Satge(Index):暂存区,用于临时存放修改的代码,事实上它只是一个文件,保存即将提交到文件列表信息。
-
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有提交到所有版本的数据。其中HEAD文件指向最新放入仓库的版本。
-
Remete:远程仓库,托管代码的服务器。
Git基本命令操作
文件操作:
文件4种状态:
版本控制就是对文件版本控制,要对文件进行修改、提交等操作,首先要知道文件当前是什么状态,不然可能会提交了现在还不想提交的文件,或者是提交的文件没提交上。
- Untracked:未跟踪,此文件在并没有加入到git库中,不参与版本控制。通过 git add 命令使该文件状态变为 Staged。
-
Unmodify:文件已经入库,未修改。即版本库中年的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,而变为 Modified ,如果使用 git rm 移出版本库,则成为 Untracked 状态文件。
-
Modified:文件已修改,仅仅是修改,并没有进行其他操作,这个文件也有两个去处,通过 git add 可进入暂存 Staged 状态,使用 git checkout 则丢弃修改,返回到 Unmodify 状态,这个git checkout 即从库中取出文件,覆盖当前修改
-
Staged:暂存状态,执行 git commit 则将修改同步到本地仓库中。同时文件变更为 Unmdify 状态。执行 git reset HEAD filename 取消暂存,文件状态为 Modified。
创建本地仓库的两种方法:一种是创建新的仓库,另一种是克隆远程仓库。
一、创建本地仓库(执行后会生成一个隐藏目录.git):
#在当前目录下创建本地仓库
git init
二、克隆远程仓库:
#将远程服务器上的仓库完全下载到本地
#例:git clone https://gitee.com/xxxxxx/openclass.git
git clone [URL]
三、更新仓库代码
#更新远程仓库 (下载远程代码并合并 git pull)
git pull origin master
#从远程获取所有代码库
git fetch --all
四、查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
五、提交文件到本地
#添加所有文件到暂存区。注意后面有一个点
git add .
#提交暂存区中的内容到本地仓库 -m 表示用于写提交内容的注释
git commit -m "备注.."
六、上传文件到远程
#上传远程代码并合并
git push
七、忽略文件
有时候项目中的一些文件是不需要提交到版本控制器中,所以增加忽略文件的相关配置。
在主目录下建立.gitigonre文件,此文件有如下规则:
1、文件中的空行或以井号开始的行将会被忽略;
2、可以使用Linux通配符。例如:* 代表任意多个字符,? 代表一个字符,[abc] 代表可选字符,{string1, string2, ...} 代表可选的字符串等。
3、如果名称的最前面有一个感叹号,表示例外规则,将不被忽略;
4、如果名称的最前面有一个路径分隔符( / ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5、如果名称的最后面有一个路径分隔符( / ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#例子
#忽略所有以.txt结尾的文件
*.txt
#lib.txt不被忽略(上一句已经忽略了所有.txt文件)
!lib.txt
#仅忽略项目跟目录下的TODO文件,不包括其他目录temp
/temp
#忽略build/目录下的所有文件
build/
#忽略doc/notes.txt 但不包括doc/server/arch.txt
#只忽略doc文件夹下一层的.txt文件,下一层的下一层不忽略
doc/*.txt
#idea 常用忽略配置
*.class
*.1og
*.lock
#Package Files#
*.jar
*.war
*.ear
target/
#idea
.idea/
*.iml
*velocity.log*
#STS#
.apt_generated
.factorypath
.springBeans
#IntelliJ IDEA#
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
#rebel
*rebel.xml*