搁浅被注册了

图样 图森破 、

@搁浅被注册了8年前

04/11
23:49
Git

Git 简明教程

作为一个不合格的 GitHub 搬运工,虽久闻 git 大名,然而却一直用的是 SVN 。趁着前阶段比较清闲,就把 git 摸了一遍,踩了不少坑,纯当记录。

然而 前几天(草稿时,已经有一段时间了)阿里云虚拟主机的数据库挂了,误以为是自己的,手残控制面板更换了操作系统,然后…. 然后就只能迁移网站了,还好旧空间数据保留7天。果然免费不靠谱… 事前事后官方都跟没事人一样。

闲话太多,进入正题 Git 简明教程。

Git客户端篇:

一. 安装git

1.安装

https://github.com/progit/progit/blob/master/zh/01-introduction/01-chapter1.markdown

2.本地账户生成公钥
本地 Git-Bash 执行:

ssh-keygen

连续回车即可,保存在本地用户目录 ~/.ssh/ 下,windows 在 c:/user/用户名/.ssh 下
其中 id_rsa 是私钥,id_rsa.pub 是公钥。每次执行 ssh-keygen 都会重新生成一组公私钥。如果你是要用于GitHub生成公钥,请执行:

ssh-keygen -t rsa -C "user@xx.com"

3.配置全局用户信息

git config --global user.name "username"
git config --global user.email "user@xx.com"

(PS.通过 git config –list 命令可查看详细配置。)

配置自定义远程服务器映射:
在本地 Git-Bash 执行:

cat> ~/.ssh/config
host gitserver (自己取个名字)
hostname ServerIP (你的git服务器地址)
port 22 (所使用的SSH端口号)

由于我的Git服务器使用的不是SSH的默认22端口,所以使用服务器映射非常方便,关于如何配置服务器见下半部分。

4.设置完成,可以初始化本地仓库或从服务器克隆
初始化本地仓库:
定位到要设置为本地仓库的目录,启动 Git-Bash 执行:

git init

或者从某服务器克隆:

git clone git@gitserver:/opt/git/project.git

二. git常用命令

git help <verb> 获取项目帮助
git config --list 查看配置信息
git rm filesName 删除文件
git mv filesName1 filesName2 重命名
git clone git@gitserver:/opt/git/project.git 从服务器仓库克隆
git remote add origin git@gitserver:/opt/git/project.git 把本地仓库关连到远程仓库
git pull 拉取远程数据并合并
git add filesName 跟踪文件至暂存区,指定. 添加所有文件
git commit -m "decoration" 提交到仓库并增加描述,加上 -a 参数,可不用重复添加至暂存区
git push origin master 提交 mastr 分支到远程
git status 查看文件状态
git diff filesName 查看差异,不指定文件名则查看全部
git log 查看提交历史,加上 --pretty=oneline 参数缩略查看
git log —stat 查看每次提交的简略的统计信息
git reflog 查看每一次命令
git branch -r 查看远程分支
git checkout -b dev (以当前分支为基础)创建本地 dev 分支
git checkout -b dev origin/dev  从远程分支映射并建立本地分支切换至新建分支
git branch --set-upstream-to=origin/dev dev 设置本地 dev 分支到远程 dev 分支的映射
git merge dev 合并 dev 分支到当前分支
git merge —abort 合并失败试取消合并
git push origin dev:dev 将本地 dev 分支推送到远端并建立远端 dev 分支
git push origin dev 将分支推送到远程
git branch -d dev 删除本地 dev 分支,-D 参数强制删除
git push origin -d dev 删除远程 dev 分支
git push origin :dev 删除远程 dev 分支
git branch -m dev newDev 重命名本地 dev 分支为 newDev,-M 参数强制重命名
git stash 储存工作现场
git stash list 查看现场
git stash pop 恢复现场并清除现场存储
git reset --hard HEAD^ 回退到上一个版本,上上个版本为 HEAD^^,或者 HEAD~2
git reset --hard 3628164 回到指定 MD5 版本,只需要前几位即可
git checkout — fileName 从版本库或者暂存区(如果在)还原文件
git tag 以字母顺序列出标签
git tag -l 'xxxxx' 查找特定标签
git tag -a v1.4 -m 'my version v1.4' 打 tag, -a 参数记录完整可校验对象
git tag v1.4 轻量标签,提交校验和存储到一个文件中,没有存储任何其他信息
git tag -d <tagname> 删除本地标签
git push origin <tagname> 推送指定标签到远端
git push --tags 推送所有标签到远端

查看更多>>

服务器搭建篇:

下文仅介绍在 CentOS 下的配置。

一. 安装git

1.先安装依赖服务

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

2.安装最新版git ( 请从 https://github.com/git/git/releases 修改下面的版本号)

wget https://github.com/git/git/archive/v2.7.4.tar.gz
tar -zxf v2.7.4.tar.gz
cd git-2.7.4
make prefix=/usr/local all
make prefix=/usr/local install

3.安装完成,检查版本

git --version

二. 配置git

1.在服务器创建一个 git 用户并为其创建一个 .ssh 目录

sudo adduser git
su git
cd /home
chmod 0755 git
cd ~
mkdir .ssh
chmod 0700 .ssh
cd .ssh
touch authorized_keys
chmod 0600 authorized_keys

2. 实现免密码访问
把本地用户公钥 id_rsa.pub(见客户端篇)加入 authorized_keys
在本地 Git-Bash 执行:

scp -P 22 ~/.ssh/id_rsa.pub root@gitserver:/home/git/.ssh

上面使用 scp 命令把本地公钥 id_rsa.pub 复制到你的服务器。其中:-P 参数指定服务器SSH端口,默认为22;~/.ssh/id_rsa.pub 为你的本地公钥路径;root 可以是你服务器上可远程登陆 SSH 的用户,需要输入用户密码,我们为了实现无密码访问必须要借助有密码的用户来实现;gitserver 为客户端篇 自定义远程服务器映射 里的 host 值;/home/git/.ssh 为你服务器上的目录。

复制完成后,在服务器上切换为git用户执行追加写入

su git
cd ~/.ssh
cat id_rsa.pub >> authorized_keys

特别注意,不要手动编辑 authorized_keys 文件,极其容易造成各种问题…

3. 指定git目录,新建裸仓并初始化

如果此时你正使用git用户,执行 exit 命令即可切换回root用户
使用 root 用户指定git目录,假设为 /opt/git/:

cd /opt
mkdir git
cd git

新建裸仓(project.git)并初始化:

mkdir project.git
cd project.git
git --bare init

更改用户所有权为 git用户:

cd ../
chown -R git:git project.git

配置完成,在本地克隆刚才新建的仓库,测试是否可以免密码操作:

git clone git@gitserver:/opt/git/project.git

三. 安全配置

出于安全考虑,第二步创建的git用户不允许登录shell,

which git-shell

复制获得的 git-shell 安装路径(例如 /usr/local/bin/git-shell),编辑配置:

vi /etc/passwd

找到最后的 git:x:1001:1001:,,,:/home/git:/bin/bash 将行末的内容修改为

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

这样,git用户可以正常通过ssh使用git,但无法登录shell。

Git 简明教程