用户名和邮箱
使用Git做版本控制时,其提交是基于用户行为的。Git为用户角色定义了两个基础属性:用户名和邮箱。
你可以在当前操作系统下配置:
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
配置的用户名和邮箱仅作为你以后的提交署名,Git并不会去验证你写的用户名和邮箱是否真实正确。
如果你的系统是mac os,可以在终端执行命令
open ~
打开用户根目录,里面有一份隐藏文件.gitconfig
,保存了你刚刚配置的用户名和密码。
如果你不想敲命令配置用户名和密码的话,也可以直接修改.gitconfig
里的[user]
段。
这里有一个命令用于显示/隐藏mac文件:
显示
defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏
defaults write com.apple.finder AppleShowAllFiles -bool false
忽略不需要提交的文件
创建一份命名叫.gitignore
的文件,可以让Git忽略指定的文件。
如果.gitignore文件放在工作区根目录,则影响整个工作区,包括子目录。
如果.gitignore文件放在子目录,则影响子目录及其包含的子目录。
在https://www.gitignore.io/输入你的开发语言,它可以帮你生成一份忽略清单。如果你觉得它生成的东西太多看花眼,也可以写这几个实用的:
*.xcscheme
*.xcuserstate
*.xcbkptlist
xcschememanagement.plist
工作区、暂存区和版本库
我们可以把最终保存修改的地方叫做版本库,这是提交的目的地。
然后把git能感知的文件目录及其子目录叫做工作区。
一般来说,我们在工作区里写代码,干活,噼呖啪啦搞完以后,就想提交一下修改,好让git保存下来。
这时候,要想从工作区提交代码到版本库,必须要经过暂存区,版本库只认从暂存区过来的提交,也就是说,提交这个动作只能从暂存区发起,到达版本库。
这样,同一份文件,最多可以同时存在三种不同的内容。怎么会这样?
- 有一份文件,现在三区同步,没有任何修改。此时文件在三个区的内容分别为A、A、A。
- 程序员gg开始干活了,对工作区上的文件一顿猛敲,内容变成了B。此时文件在三个区的内容是B、A、A。
- gg觉得这顿猛敲可以告一段落了,就打算把它提交了吧。然而想要提交,是要先放到暂存区的,好吧,把工作区的修改同步到暂存区,发出一个add命令,这样,三个区的内容变成了B、B、A。
- gg刚敲完add命令,就后悔了,不对,这样写有bug,得改改再提交。于是继续在工作区把文件内容改为了C。于是,三个区的内容变成了C、B、A。
- 就在这个时候,gg接到了通知要去开会,时间还不短,gg想这回来以后还能记得思路吗,电脑还健在否?小bug无伤大雅,赶紧提交一波再说。于是把暂存区的内容B提交了。此时,三个区的内容分别是C、B、B。
- gg开完会已经深夜了,匆匆把C暂存起来,觉得精神状态不对,没敢提交,于是拖着疲惫的身躯回了家...
暂存和储藏
在Git中,有两个词比较相似,stage
和stash
,暂存和储藏。
暂存stage是暂存区,在暂存区的东西可以被提交到最终的版本库。
然而,stage的东西其实也可以不提交到版本库,而是储藏起来,即进行stash。
有时在进行某个事情的时候,突然有其它紧急问题需要立即修改,这时候可以考虑把当前修改储藏起来。
git stash
这个操作会把整个stage区储藏起来,然后你可以继续进行其它的修改操作,正常提交。
然后
git stash pop
pop操作可以把储藏区内容恢复到暂存区。
参考资料:
《Git学习指南》
网友评论