openBSD安全的系统
安装git
git init
ls -la //查看.git 隐藏文件,无论windows还是linux如果文件前面为点,就是隐藏文件
配置源码作者和邮箱
git config --global user.name 'wilson'
git config --global user.email 'wilson@yahoo.com'
进入家目录,windows和linux都有家目录,如c/users/wilson。
cat .gitconfig可以查看刚刚配置的源码作者和邮箱
id可以查看用户
再返回新建的源码目录
ls -l .git
cat .git/config
git config user.name ''
git config user.email ''
working directory
staging area
repository
git commit -a or git add git commit
git add main.c //就加到staging area,也就是ls -l .git可以查看多了一个index文件
git commit -m "init project" //把staging area放到了repository
rm -f main.c //删除
git checkout -f HEAD //可以恢复
blob:叶子节点,主要用来存储文件
tree:多个目录
commit:把版本提交为一个简单的树
git hash-object main.c //sha1 的hash值
git add .//把当前目录下所有的都加入
ls -l .git/objects/fc //fc+下面文件名,就是hash值
commit -m "" //引号里面是备注
find .git/objects/ -type f //可以查看.git下面所有的文件
git show fc047f //修可以显示main.c的内容
git cat-file -t 0593 //查看文件类型
tree里面就是各种指针,
git ls-tree 0593 //可以查看tree文件里面的内容
内容和文件名会分离,commit就是快照,一些指向树和作者时间戳等信息。
git show -s --pretty=raw 2364 //可以查看commit里面的内容
head是指针,也就是正在工作的commit。
tag object标签对象,主要用于版本发布时特殊时刻的标记。
head remote branch 都可以为reference。
cat .git/head //就是head指针
tag 可以是对象也可以是指针。轻量级tag和重量级tag。
ls -l .git/refs/tags/
git tag v1.0
cat .git/refs/tags/v1.0
git cat-file -t 9e7b //是个commit
git tag -a milestone1.0 -m "This" //一个全面的信息,除了1.0以外还有一个注释,所以为对象
cat .git/refs/tags/milestone1.0 //指向一个tag
git archive --format=tar --prefix=ruby/ v1.0 | gzip > /tmp/ruby1.0.tar.gz //提取之前的tag,v1.0,进行发布。
tar zxvf ruby1.0.tar.gz
创建分支
license2 readme test.rb
git init
git add .
git commit -m "1st commit" //find .git/objects/ -type f | wc -l 得到5个
git branch //得到master,缺省分支
cat .git/HEAD
cat .git/refs/heads/master //指向commit对象
vi test.rb
git commit -a -m "2nd commit"
vi readme
git commit -a -m "3rd commit"
git branch testing //创建分支testing
cat .git/head
cat .git/refs/heads/master //两个指针指向同一个对象
cat .git/refs/heads/testing //两个指针指向同一个对象
git checkout testing //切换head为testing
git branch //查看两个分支testing和master
cat .git/head //指向了testing
vi test.rb //修改test.rb
git commit -a -m "testing 4th commit"
cat .git/refs/heads/master //两个指针指向不同一个对象
cat .git/refs/heads/testing //两个指针指向不同一个对象
这样切换那个就可以使用那个test.rb
cat test.rb //testing的test.rb
git checkout master
cat test.rb //master的test.rb
合并需要确定以谁为主,如以master为主。合并可能冲突
git checkout master //先切换到master
git merge testing //进行merge
删除分支
git branch -D testing
合并算法:three-way merge