六, 忽略文件
忽略某些文件时, 需要编写. gitignore;
.gitignore 文件本身要放到版本库里, 并且可以对. gitignore 做版本管理!
忽略文件的原则是:
忽略操作系统自动生成的文件, 比如缩略图等;
忽略编译生成的中间文件, 可执行文件等, 也就是如果一个文件是通过另一个文件自动生成的, 那自动生成的文件就没必要放进版本库, 比如 Java 编译产生的. class 文件;
忽略你自己的带有敏感信息的配置文件, 比如存放口令的配置文件.
有些时候, 你想添加一个文件到 Git, 但发现添加不了, 原因是这个文件被. gitignore 忽略了:
- $ Git add App.class
- The following paths are ignored by one of your .gitignore files:
- App.class
- Use -f if you really want to add them.
如果你确实想添加该文件, 可以用 - f 强制添加到 Git:
$ Git add -f App.class
或者你发现, 可能是. gitignore 写得有问题, 需要找出来到底哪个规则写错了, 可以用 Git check-ignore 命令检查:
- $ Git check-ignore -v App.class
- .gitignore:3:*.class App.class
Git 会告诉我们,.gitignore 的第 3 行规则忽略了该文件, 于是我们就可以知道应该修订哪个规则.
七, 配置别名
如果敲 Git st 就表示 Git status 那就简单多了, 当然这种偷懒的办法我们是极力赞成的.
我们只需要敲一行命令, 告诉 Git, 以后 st 就表示 status:
$ Git config --global alias.st status
好了, 现在敲 Git st 看看效果.
当然还有别的命令可以简写, 很多人都用 co 表示 checkout,ci 表示 commit,br 表示 branch:
- $ Git config --global alias.co checkout
- $ Git config --global alias.ci commit
- $ Git config --global alias.br branch
以后提交就可以简写成:
$ Git ci -m "bala bala bala..."
--global 参数是全局参数, 也就是这些命令在这台电脑的所有 Git 仓库下都有用.
在撤销修改一节中, 我们知道, 命令 Git reset HEAD file 可以把暂存区的修改撤销掉(unstage), 重新放回工作区. 既然是一个 unstage 操作, 就可以配置一个 unstage 别名:
$ Git config --global alias.unstage 'reset HEAD'
当你敲入命令:
$ Git unstage test.py
实际上 Git 执行的是:
$ Git reset HEAD test.py
配置一个 Git last, 让其显示最后一次提交信息:
$ Git config --global alias.last 'log -1'
这样, 用 Git last 就能显示最近一次的提交:
- $ Git last
- commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2
- Merge: bd6ae48 291bea8
- Author: Michael Liao <askxuefeng@gmail.com>
- Date: Thu Aug 22 22:49:22 2013 +0800
- merge & fix hello.py
甚至还有人丧心病狂地把 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 lg 的效果:
为什么不早点告诉我? 别激动, 咱不是为了多记几个英文单词嘛!
配置文件
配置 Git 的时候, 加上 --global 是针对当前用户起作用的, 如果不加, 那只针对当前的仓库起作用.
配置文件放哪了? 每个仓库的 Git 配置文件都放在. Git/config 文件中:
- $ cat .Git/config
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- ignorecase = true
- precomposeunicode = true
- [remote "origin"]
- url = Git@GitHub.com:michaelliao/learngit.Git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
- [alias]
- last = log -1
别名就在 [alias] 后面, 要删除别名, 直接把对应的行删掉即可.
而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件. gitconfig 中:
- $ cat .gitconfig
- [alias]
- co = checkout
- ci = commit
- br = branch
- st = status
- [user]
- name = Your Name
- email = your@email.com
配置别名也可以直接修改这个文件, 如果改错了, 可以删掉文件重新通过命令配置
八, 搭建 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 https://github.com/res0nat0r/gitosis 来管理公钥.
这里我们不介绍怎么玩 Gitosis https://github.com/res0nat0r/gitosis 了, 几百号人的团队基本都在 500 强了, 相信找个高水平的 Linux 管理员问题不大.
管理权限
有很多不但视源代码如生命, 而且视员工为窃贼的公司, 会在版本控制系统里设置一套完善的权限控制, 每个人是否有读写权限会精确到每个分支甚至每个目录下. 因为 Git 是为 Linux 源代码托管而开发的, 所以 Git 也继承了开源社区的精神, 不支持权限控制. 不过, 因为 Git 支持钩子(hook), 所以, 可以在服务器端编写一系列脚本来控制提交等操作, 达到权限控制的目的. Gitolite https://github.com/sitaramc/gitolite 就是这个工具.
这里我们也不介绍 Gitolite https://github.com/sitaramc/gitolite 了, 不要把有限的生命浪费到权限斗争中.
小结
搭建 Git 服务器非常简单, 通常 10 分钟即可完成;
要方便管理公钥, 用 Gitosis https://github.com/sitaramc/gitolite ;
要像 SVN 那样变态地控制权限, 用 Gitolite https://github.com/sitaramc/gitolite .
GitHub 笔记(五)-- 忽略文件, 配置别名, 搭建服务器
来源: http://www.bubuko.com/infodetail-2982199.html