一、搭建 git 服务器
在服务器上创建一个目录用于 git 服务根目录,如 /git,然后在该目录下创建游戏目录,如 new_game.git (服务器上的 git 仓库推荐以 .git 结尾),将 new_game.git 初始化为一个裸仓库,并创建一个名为 git 的用户,将 git 根目录所有者更改为 git 用户:
mkdir /git/new_game.git git init --bare /git/new_game.git adduser git chown -R git:git /git
设置该 git 用户禁止登录 shell,修改 /etc/password 文件,找到 git 那一行修改如下:
git:x:502:502::/home/git:/usr/bin/git-shell
这时,git 服务端仓库就设置好了,可以通过下面的命令在客户端拉取一下:
git clone git@www.my.com:/git/new_game.git
没有意外的话,会提示找不到该仓库,那是因为 git 默认使用 ssh 协议来传输数据,需要将客户端的 ssh 公钥添加到服务器的 /home/git/.ssh/authorized_keys 文件中,那么如何在客户端获取公钥呢?它存储在用户目录的 .ssh/ 目录下,id_rsa 表示私钥,id_rsa.pub 就是公钥了,将 id_rsa.pub 中的字串添加到服务器就好了。如果发现并没有生成私钥和公钥,可以通过下面的命令生成(一路回车使用默认值即可):
ssh-keygen -t rsa -C "mail@163.com"
然后再在客户端拉取仓库,应该就没有问题了。
二、基础命令
git 是一个分布式版本管理工具,即可以将版本库分布在不同的终端,不同于集中式版本工具,但通常使用时,为了方便也会为 git 创建一个类似中央服务器的服务端,用于 push/pull 。
通过 git init 命令将当前文件夹初始化为一个 git 仓库,生成一个 .git 的隐藏文件夹。
git 有暂存区和工作区的概念,通过 git status 来查看工作区状态,通过 git add 将文件添加到暂存区,通过 git commit -m "commit" 提交版本到版本库。注意 git commit 和 git push 的区别,后者是推送到其它版本库。
使用 git 不同于 svn,必须要先通过 git add 将修改提交到暂存区,再通过 git commit 将暂存区所有记录提交到版本库。比如创建了一个文件,然后 git add 了,再对这个文件进行修改,然后 git commit ,就会丢失对这个文件的修改,因为后面的修改并没有提交到暂存区。
git 使用 HEAD 作为指向当前分支的指针,而分支的指针指向当前的提交,通过 git reset --hard `版本` 即可切换到任何指定的版本,为方便操作,HEAD表示当前版本,上一个版本可简写成 HEAD^,上上一个版本可简写为 HAED^^,上 n 个版本可简写为 HEAD~n,如:
git reset --hard eb34e70
git reset --hard HEAD git reset --hard HEAD^ git reset --hard HEAD^^ git reset --hard HEAD~3
使用 git log 可以查看所有旧版本提交历史(比当前版本更老的版本),如果需要查看比当前版本更新的版本信息,可以使用 git reflog 来查看命令操作记录。对于 git log 如果嫌输出内容太多,可以使用 git log --pretty=oneline
svn 放弃某个文件的修改,可以使用 svn revert 命令,git 也有类似操作,但 git 的回退命令分为工作区和暂存区,分别对应的命令是 `git checkout -- filename` `git reset HEAD filename`, git checkout -- filename 是将版本库中某个文件覆盖当前工作区中的文件, git reset HEAD filename 是将版本库中的某文件覆盖到工作区和暂存区中的某文件。
git rm 用于删除某个文件(记录在暂存区),然后通过 git commit 提交到版本库。
git地址可以使用 git 和 https 前缀表示,前者使用 ssh 协议,后者使用 https,一般推荐使用前者,后者速度比较慢且每次推送都需要输入口令。
关于分支:
查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name>
Unity工程使用 git 时,除了要设置正确的 .gitignore 之外,还需要对 Unity 编辑器进行设置:
Edit——Project Settings——Editor,进行如下设置:
git设置代理:
git config --global http.proxy http://127.0.0.1:3213
git config --global https.proxy https://127.0.0.1:3213
取消http代理
git config --global --unset http.proxy
git config --global --unset https.proxy