一,安装git
用ssh-keygen生成秘钥
ssh-keygen -t rsa -C "your_email@example.com"
cat ~/.ssh/id_rsa.pub
二,配置git
git config命令
若使用 git config --global 选项,用户目录下的配置文件(~/.gitconfig 文件)只适用于该用户。
若使用 git config --system 选项,系统中的文件(/etc/gitconfig 文件)对所有用户都普遍适用的配置。
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@ example.com
要检查已有的配置信息,可以使用 git config --list 命令查看。三,开始项目
有两种取得 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。
(1)在工作目录中初始化新仓库
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录里,执行:
$ git init
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
$ git add *.c
$ git add README
$ git commit -m 'initial project version'
(2)从现有仓库克隆
$ git clone git://github.com/schacon/grit.git
这会在当前目录下创建一个名为“grit”的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。如果进入这个新建的grit 目录,你会看到项目中的所有文件已经在里边了,准备好后续的开发和使用。如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
唯一的差别就是,现在新建的目录成了 mygrit,其他的都和上边的一样。之后,我们修改项目,记录每次更新到仓库,要确定哪些文件当前处于什么状态,可以用 git status 命令。
(3)跟踪新文件
使用命令 git add 开始跟踪一个新文件。所以,要跟踪 README 文件,运行:
$ git add README/文件夹
git add 是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等
(4)提交更新
每次准备提交前,先用git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit:
$ git commit -m "Story182: Fix benchmarks for speed"
尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上-a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:$ git status
# On branch master
#
# Changed but not updated:
#
# modified: benchmarks.rb
#
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 files changed, 5 insertions(+), 0 deletions(-)
所以,git commit -a -m "xxx" = git add + git commit -m "xxx"
(5)把远程新代码 更新 到本地代码
git fetch + git merge = git pull
(6)如果新增了代码,又没有提交,而且又想回退到原先的工作目录
git stash (就是git add的反向操作)
四,管理远程库
以上这些操作都是对于本地库进行的,以下才是与远程库打交道。
要查看当前配置有哪些远程仓库,可以用 git remote 命令,
$ git remote
origin
也可以加上 -v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址:$ git remote -v
origin git://github.com/schacon/ticgit.git
(1)添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]:
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb:
$ git fetch pb
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
现在,Paul 的主干分支(master)已经完全可以在本地访问了,对应的名字是 pb/master,你可以将它合并到自己的某个分支,或者切换到这个分支,看看有些什么有趣的更新。(2)推送数据到远程仓库
实现这个任务的命令很简单: git push [remote-name] [branch-name]。如果要把本地的 master 分支推送到origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:(-f选项:强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容)
$ git push origin master
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那 你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。
(3)查看远程仓库信息
我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库,可以运行:
$ git remote show origin
* remote origin
URL: git://github.com/schacon/ticgit.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branches
master
ticgit
(4)远程仓库的删除和重命名
移除对应的远端仓库,可以运行 git remote rm 命令:
$ git remote rm paul
$ git remote
origin
在新版 Git 中可以用 git remote rename 命令修改某个远程仓库在本地的简短名称,比如想把 pb 改成paul,可以这么运行:
$ git remote rename pb paul
$ git remote
origin
paul
本地仓库由git维护三棵“树”组成:
第一个是“工作目录(working dir)”,它持有实际文件;
第二个是“缓存区(index)”,它像个缓存区域,临时保存你的改动;
第三个是“head”,指向你最近一次提交后的结果。
如果git push的时候出现错误如下:
error: The requested URL returned error: 403 while accessing https://github.com/wenph/rpg/info/refs
fatal: HTTP request failed
解决办法:
vim .git/config
修改
- [remote "origin"]
- url = https://github.com/wenph/example.git
- [remote "origin"]
- url = https://wenph@github.com/wenph/example.git