第一步:当然是先安装
windows上安装git http://msysgit.github.io/
配置你的username 和email
$ git config --global user.name "Yourname"
$ git config --global user.email "email@example.com"
创建版本库
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
第二步,通过git init命令把这个目录变成git可以管理的仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用
ls -ah
命令就可以看见。
现在我们编写一个readme.txt文件,内容如下:
Git is a version control system.
Git is free software.
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add告诉Git,把文件添加到仓库
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit)cb926e7] wrote a readme file 1 file changed, 2
insertions(+) create mode 10064 readme.txt
git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样就能从历史记录里方便地找到改动记录
git commit命令执行成功后会告诉你,1个文件改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files"
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:
远程仓库
第1步:创建SSH Key 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
点“Add Key”,你就应该看到已经添加的Key:
ps: id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
下一步,就可以把本地库的所有内容推送到远程库上
$ git push -u origin master
Counting objects: 19, done. Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done. Writing objects: 100%
(19/19), 13.73 KiB, done. Total 23 (delta 6), reused 0 (delta 0) To
git@github.com:michaelliao/learngit.git
[new branch] master -> master Branch master set up to track remote branch master from origin.
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
SSH警告
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be
RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you
to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
从远程库克隆:
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap
,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:
git clone git@github.com:michaelliao/bootstrap.git
一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
小结
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
可以推送pull request给官方仓库来贡献代码。在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项。比如,让Git显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true
小结
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
常见错误总结
如果输入
$ git remote add origin
git@github.com:djqiang(github帐号名)/gitdemo(项目名).git
提示出错信息:
fatal: remote origin already exists.
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git
就不会报错了!
3、如果输入$ git remote rm origin
还是报错的话,
error: Could not remove config section 'remote.origin'
. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径,我的是
C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc
5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]
那一行删掉就好了!
如果输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey)
.因为新生成的key不能加入ssh就会导致连接不上github。
解决办法如下:
1、先输入$ ssh-agent
,再输入$ ssh-add ~/.ssh/id_key
,这样就可以了。
2、如果还是不行的话,输入ssh-add ~/.ssh/id_key
命令后出现报错
Could not open a connection to your authentication agent
.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。
3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
如果输入$ git push origin master
提示出错信息:
error:failed to push som refs to .......
解决办法如下:
1、先输入$ git pull origin master
//先把远程服务器github上面的文件拉下来
2、再输入
$ git push origin master
3、如果出现报错
fatal: Couldn't find remote ref master或者fatal: 'origin' does not
appear to be a git repository以及fatal: Could not read from remote
repository.
4、则需要重新输入$ git remote add origingit@github.com:djqiang/gitdemo.git
提示出错信息:
fatal: Unable to create '/path/my_proj/.git/index.lock': File exists.
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
解决方法如下:
rm -f ./.git/index.lock
使用git在本地创建一个项目的过程
$ makdir ~/hello-world //创建一个项目hello-world
$ cd ~/hello-world > //打开这个项目
$ git init //初始化
$ touch README $ git add README > //更新README文件
$ git commit -m 'first commit' //提交更新,并注释信息“first
commit” $ git remote add origin git@github.com:defnngj/hello-world.git > //连接远程github项目
$ git push -u origin master //将本地项目更新到github项目上去
gitconfig配置文件
Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:
1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。
2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
在Windows系统中,Git在$HOME目录中查找.gitconfig文件(对大多数人来说,位于C:Documents and Settings$USER下)。它也会查找/etc/gitconfig,尽管它是相对于Msys 根目录的。这可能是你在Windows中运行安装程序时决定安装Git的任何地方。
warning: LF will be replaced by CRLF
问题解决方法
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法:
$ rm -rf .git
// 删除.git$ git config --global core.autocrlf false
//禁用自动转换 (两个虚线)
然后重新执行:
$ git init
$ git add .
总结
当我们想要在gitub上的不同仓库推送代码的时候,先在gitub新建repository,在本地新建文件夹,又可以被称为work directory,cd directory,然后git init 为了防止 错误, 输入$ git remote add origin git@github.com:xiaoxiongmila/gitdemo.git 就不会报错了!git add demo git commit -m "demo说明" 接着 先输入$ git pull origin master //先把远程服务器github上面的文件拉下来
下一步,就可以把本地库的所有内容推送到远程库上 $ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
第二次往相同的仓库里面添加文件,就直接cd directory git add directory git commit -m “文件说明” git push origin master就可以了,,不管你行不行,反正我是行了^-^
PS: 遇到错误一定不要放弃,,坚持就是胜利!~~