Git入门

1、初始化设置:( 注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
2、创建版本库:( 通过 git init 命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git
3、文件添加到仓库: git add readme.txt(git add dir1 ( 添加dir1这个目录,目录下的所有文件都被加入 )  git add f1 f2 ( 添加f1,f2文件)   git add . ( 添加当前目录下的所有文件和子目录 ))
4、文件提交到仓库: $ git  commit -m "操作注释"
5、掌握仓库当前的状态: git status
6、看具体修改了什么内容: $ git diff readme.txt 查看文件内容: $ cat readme.txt
7、查看文件历史记录: $ git log 过滤: git log --pretty=oneline
8、退回到上一个版本:(上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
$ git reset --hard HEAD^
9、退回到指定版本: $ git re set --hard 3628164
10、查看操作命令历史记录: $ git reflog
11、查看工作区和版本库里面最新版本的区别: $ git diff HEAD -- readme.txt 
12、在工作区的修改撤销: git checkout -- readme.txt
13、暂存区的修改撤销掉: $ git re set HEAD readme.txt
14、删除文件: $ git rm test.txt 删错了: git checkout -- test.txt 恢复整个目录下的文件:$ git checkout ./
远程仓库
15、创建SSH Key:( 如果一切顺利的话,可以在用户主目录里找到 .ssh 目录,里面有 id_rsa id_rsa.pub 两个文件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放心地告诉任何人。
$ ssh-keygen -t rsa -C"youremail@example.com"
16、本地仓库关联在GitHub上:
$ git remote add origin git@github.com:username/pathname.git
17、把本地仓库的内容推送到GitHub仓库:(如何解决 "failed to push some refs to git"可以通过如下命令进行代码合并:①. $  git pull --rebase origin master ②. $  git push -u origin master
$ git push -u origin master
18、从现在起,只要本地作了提交,就可以通过命令: git push origin master
19、从GitHub克隆一个库到本地: git clone git @github . com: username/pathname .git
创建与合并分支
20、创建dev分支并切换到dev分支: git checkout -b <name>  创建分支: git branch  <name>
21、查看当前分支: git branch
22、切换回master分支: git checkout master
23、把dev分支的工作成果合并到master分支上: git merge <name>git merge 命令用于合并指定分支到当前分支
24、删除dev分支: git branch -d <name>
分支管理策略
25、合并dev分支,请注意--no-ff参数,表示禁用Fast forward:( fast forward 合并就看不出来曾经做过合并
$ git merge --no-ff -m "禁用Fast forward" dev
Bug分支
26、把当前工作现场“储藏”起来,等以后恢复现场后继续工作: git stash
27、查看工作现场: git stash list
28、恢复 工作现场:①.git stash apply,删除缓存git stash drop②.恢复并删除缓存git stash pop
29、恢复指定工作现场: git stash apply stash@{ 0 }
Feature分支
30、创建Feature分支: git checkout -b feature-vulcan;增加: git add vulcan.py 提交: git commit -m  "xxx"
31、Feature分支准备合并: git checkout dev ;就地销毁: git branch -d feature-vulcan
32、 Feature分支强行删除: git branch - D  feature-vulcan
多人协作
33、要查看远程库的信息: git remote、 git remote -v
34、推送分支: git push origin master; git push origin <name>
35、 创建远程 origin dev 分支到本地 git checkout -b dev origin/dev;时不时地把dev分支push到远程: $ git push origin dev
36、推送失败时, 先用 git pull 把最新的提交从 origin/dev 抓下来,然后,在本地合并,解决冲突,再推送:
$ git pull;$ git branch --set-upstream dev origin/dev ;$ git pull;解决文件冲突;$ git push origin dev
37、 因此,多人协作的工作模式通常是这样:
  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream<branch-name> origin/<branch-name>这就是多人协作的工作模式,一旦熟悉了,就非常简单。

标签管理

38、切换到需要打标签的分支上: git tag v1. 0
39、查看所有标签: git tag
40、找到历史提交的commit id,然后打上就可以了: git log --pretty=oneline --abbrev-commit; git tag v 0 . 9 6224937
41、查看标签信息: $ git  show v0.9
42、创建带有说明的标签: git tag -a v 0 . 1  -m  "version 0.1 released" 3628164
43、用私钥签名一个标签: git tag -s v 0 . 2  -m  "signed version 0.2 released"  fec145a
44、删除标签: git tag -d v 0 . 1
45、推送某个标签到远程: git push origin v1. 0
46、一次性推送全部尚未推送到远程的本地标签: $ git push origin --tags
47、删除远程标签: ①.先从本地删除 git tag -d v 0 . 9 ②.从远程删除 git push origin  :refs/tags/v0 . 9
忽略特殊文件

完整的.gitignore文件,内容如下:

# Windows:Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
48、 最后一步就是把 .gitignore 也提交到Git,就完成了!当然检验 .gitignore 的标准是 git status 命令是不是说 working directory clean
配置别名
49、告诉Git,以后st就表示status: git config --global  alias .st status
50、 配置一个 unstage 别名: git config --global  alias .unstage  'reset HEAD'
51、 配置一个 git last ,让其显示最后一次提交信息: git config --global  alias .last  'log -1'这样,用git last就能显示最近一次的提交)
52、 甚至还有人丧心病狂地把 lg 配置成了: git config --global  alias .lg  "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"


搭建Git服务器

远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。

GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git

$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning:You appear to have cloned an empty repository.

剩下的推送就简单了。

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

管理权限

有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。

这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。

小结

  • 搭建Git服务器非常简单,通常10分钟即可完成;

  • 要方便管理公钥,用Gitosis

  • 要像SVN那样变态地控制权限,用Gitolite

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值