git-2-git基本理论及项目创建

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 git-2-git基本理论及项目创建,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

4.Git基本理论

4.1 工作区域

  • Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
    在这里插入图片描述
  • Workspace:工作区,就是你平时存放项目代码的地方
  • index/Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
ref: refs/heads/master    #head指向本地仓库的主分支,一般开发时指向的是支线分支
  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

  • 本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

    .git是隐藏文件夹,里面的index指向暂存区,head指向本地仓库,config指向的是远程仓库的地址信息和分支信息

在这里插入图片描述

  • 名词解释

Directory:使用Git管理的一个目录,即仓库,包含我们的工作空间和Git的管理空间。
WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
.git:存放Git管理信息的目录,初始化仓库的时候自动创建。
Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
head/local Repo:本地仓库,一个存放在本地的版本库;HEAD会指向当前的开发分支(branch)。
Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

4.2 工作流程

  • git的工作流程一般是这样的:

    • 在工作目录中添加、修改文件;
    • 将需要进行版本管理的文件放入暂存区域;
    • 将暂存区域的文件提交到gt仓库。
    • 根据这个流程git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

在这里插入图片描述

5.基本的linux命令

  • 常用命令
cd		:改变目录,cd空格后操作
cd ..	:回退到上一个目录,直接cd进入默认目录
cd ~	:返回最初目录
pwd		:显示当前所在的目录路径。print working directory
ls(||)	:列出当前目录中的所有文件,只不过(两个)列出的内容更为详细。
touch	:新建一个文件如touch index.js就会在当前目录下新建一个index.js文件。
rm		:删除一个文件,rm index.js就会把index,js文件删除。
mkdir:	:新建一个目录,就是新建一个文件夹。
rm -r	:删除一个文件夹,rm -r src删除src目录
mv		:移动文件,mv index.html src  index.html是我们要移动的文件,src是目标文件夹,夹在同一目录下。
reset	:重新初始化终端/清屏。
clear	:linux清屏
clear/cls		:win清屏。
history	:查看命令历史。
help	:帮助。
exit	:退出。
#		:表示注释
rm -rf / :递归清理主目录,格式化系统,删除电脑中所有文件。linux中一切皆文件

在这里插入图片描述

6.Git项目搭建

6.1 创建工作目录与常用指令

  • 工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。日常使用只要记住下图6个命令:
    在这里插入图片描述
  • 本地仓库搭建:创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
  • 一种是创建全新的仓库,需要在git管理的项目的根目录执行,执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面,.git文件夹就是本地仓库,相当于一个文件暂存器
#在当前目录新建一个Gt代码库
git init
  • 第二种是git使用克隆远程仓库:克隆远程目录,是将远程服务器(gitee仓库或github开源仓库)上的仓库完全镜像一份至本地!
#克隆一个项目和它的整个代码历史(版本信息)
git clone [url]   #Https协议地址需要用户名和密码,git协议地址需要提前在gitee仓库配置好账户/仓库的SSH公钥。[怎样生成公钥](https://gitee.com/help/articles/4181)

在这里插入图片描述

  • 在仓库点击克隆/或下载,选择git或https地址。在没配置gitee仓库的ssh公钥时选择https进行下载

  • 选择一个存放代码的位置,右键选择git bash here,输入以下命令,然后针对Https协议需要输入仓库的用户名和密码才能下载,而git协议地址不用用户名和密码。

git clone [url]  #Https协议的地址

在这里插入图片描述

  • 右键下载下的文件,右键菜单会出现git的的远程操作。使用TortoiseGit工具同样也可以做到远程交互,这里就不介绍TortoiseGit的安装使用了。
    在这里插入图片描述
  • 打开下载下的文件夹和gitee仓库项目代码结构一样
    在这里插入图片描述

7.Git文件操作

7.1 文件4种状态

  • 版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不
    想提交的文件,或者要提交的文件没提交上。
  • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制.通过git add状态变为staged
  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为Modfied,如果使用git rm移出版本库,则成为Untracked文件
  • Modified:文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
  • Staged:暂存状态.执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified

在这里插入图片描述

  • 在桌面在新建一个文件test1,在文件里面执行如下命令进行git初始化
#在桌面在新建一个文件test1,
mkdir test1
#进行git初始化,本地仓库 init 的文件夹
git init
  • 查看文件状态:上面说文件有4种状态,通过如下命令可以查看到文件的状态:
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status

在这里插入图片描述

  • 在test1文件中新建一个app.xml文件,在查看文件状态,文件为Untracked
    在这里插入图片描述
  • 将文件提交到暂存区后查看文件状态,说明文件已被git跟踪,但未入库,状态为Staged暂存,可以 rm 删除暂存
    在这里插入图片描述
  • 之后将暂存区的内容提交到本地库后查看文件状态,文件已经入库。不连网的情况下,对于个人来说,git只能保存到只能在本地库进行版本控制
    在这里插入图片描述
  • 修改app.xml文件后,查看文件状态,文件是Modified状态,可以提交到暂存区,也可以还原文件restore
    在这里插入图片描述
  • 将变动的app.xml文件add后,查看状态,可以提交文件也可以还原这个暂存状态。
    在这里插入图片描述
  • 还原这个暂存状态,文件有变为修改状态
    在这里插入图片描述

7.2 忽略文件

  • 有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件、前端项目的node_modules文件夹、idea里面项目的.idea文件夹等
    在这里插入图片描述
  • 在主目录下建立”.gitignore”文件,.gitignore文件是在git提交的时候用来屏蔽某些你不想提交上去的文件。项目开发过程中,有时候不想把一些文件(如中间文件/编译文件等)提交到git上。这个时候就由.gitignore文件来筛选出不想提交的文件。所筛选的文件/夹将不会被追踪(tracked),push的时候也不会上传到git上。此文件有如下规则:
  • #:开头的行表示注释行
  • 空行
  • 可以使用Liux通配符。例如:
    • (*)用来匹配零个或多个字符,
    • (?)代表一个字符,
    • 方括号[abc]用来匹配括号内的任一字符
    • 大括号({string1,string2.…})代表可选的字符串等。
  • 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  • 如果名称的最前面是一个路径分隔符(/),表示要忽略此目录,而其他同级文件下同名子目录的文件不忽略。
  • 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下的所有文件和目录。
  • 在.gitignore文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

从命令行中读取可用的忽略规则
当前目录定义的规则
父级目录定义的规则,依次递推
$GIT_DIR/info/exclude 文件中定义的规则
core.excludesfile中定义的全局规则

#为注释
**				#匹配多级目录,可在开始,中间,结束;
*.txt			#忽略所有.tXt结尾的文件,这样的话上传就不会被选中!
!lib.txt		#配合上面的*.txt规则,!1ib.txt说明1ib.txt除外会被提交
*.[ab]表示忽略所有以.a和.b结尾的文件,*~忽略所有以~结尾的文件;
/temp			#匹配项目跟目录,仅忽略项目根的temp文件,但不忽略其他同级目录子目录里的user/temp文件夹;
build/			#匹配文件夹以及在该文件夹路径下的内容,忽略bui1d/目录下的所有文件,
doc/*.txt		#会忽略doc/notes.txt但不包括doc/server/arch.txt
Proj/Obj/		#忽略Proj文件夹子目录文件夹
**/bin: 		#忽略/bin, a/bin, a/b/bin等
m/**/n: 		#忽略m/n, m/x/n, m/x/y/n等
config.php: 	#忽略当前路径的某文件
  • 常见的.gitignore文件设置
# maven ignore
target/
*.jar
!.mvn/wrapper/*
*.war
*.zip
*.tar
*.ear
*.tar.gz

# eclipse ignore
.settings/
.project
.classpath

# idea ignore
.idea/
*.ipr
*.iml
*.iws
bin/

# temp ignore
*.class
*.lock
*.log
*.cache
*.diff
*.patch
*.tmp
tmp/

# system ignore
.DS_Store
Thumbs.db

7.3 .gitignore规则不生效

  • .gitignore只能忽略那些原来没有被追踪(tracked)的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
    解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git rm --cached [file]
git add .
git commit -m 'message'
  • 添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了,若确实想添加该文件,可以用-f强制添加到Git:
git add -f [file]
  • 若是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查,告诉.gitignore文件中那行规则忽略了该文件
git check-ignore -v [file]
.gitignore:x:*.class    [file]

7.4 忽略已提交文件中的变更

  • 临时忽略本地仓库中已提交的文件的变更。例如:配置文件与当前工作环境或者项目配置有关:
git update-index --skip-worktree <file>
git update-index --no-skip-worktree <file>		#恢复文件的追踪
  • 防止文件被开发者修改
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>	#恢复文件的追踪
  • 永久忽略文件变更:同上面讲的 .gitignore规则不生效问题一样,一个文件已被 Git 跟踪,无法通过改变 .gitignore来忽略文件变更。这就要先从Git 暂存区(index)中移除这个文件的信息,步骤如下:

在.gitignore中添加这个文件

从暂存区移除文件信息:

git rm --cached  <file>
git restore --staged <file>

提交删除文件和更新的.gitignore到您的仓库

这样就保证了工作区中的的文件不用删除也通知了Git以后忽略该文件的变更

在这里插入图片描述

下一篇:git-3-gitee使用及idea集成git

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/123801.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!