windows上安装git http://msysgit.github.io/
配置你的username 和emaillinux
$ git config --global user.name "Yourname" $ git config --global user.email "email@example.com"
建立版本库git
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/github
瞬间Git就把仓库建好了,并且告诉你是一个空的仓库(empty Git repository),细心的读者能够发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,否则改乱了,就把Git仓库给破坏了。
若是你没有看到.git目录,那是由于这个目录默认是隐藏的,用bootstrap
ls -ahwindows
命令就能够看见。服务器
如今咱们编写一个readme.txt文件,内容以下:app
Git is a version control system. Git is free software.
必定要放到learngit目录下(子目录也行),由于这是一个Git仓库,放到其余地方Git再厉害也找不到这个文件。框架
和把大象放到冰箱须要3步相比,把一个文件放到Git仓库只须要两步。ssh
$ git add readme.txt
$ 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.
解决办法以下:
一、先输入$ git remote rm origin
二、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git
就不会报错了!
三、若是输入$ git remote rm origin
仍是报错的话,
error: Could not remove config section 'remote.origin'
. 咱们须要修改gitconfig文件的内容
四、找到你的github的安装路径,个人是
C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc
五、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]
那一行删掉就行了!
若是输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey)
.由于新生成的key不能加入ssh就会致使链接不上github。
解决办法以下:
一、先输入$ ssh-agent
,再输入$ ssh-add ~/.ssh/id_key
,这样就能够了。
二、若是仍是不行的话,输入ssh-add ~/.ssh/id_key
命令后出现报错
Could not open a connection to your authentication agent
.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不须要再ssh-add命令加入了,其它的user,token等配置都用命令行来作。
三、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
若是输入$ git push origin master
提示出错信息:
error:failed to push som refs to .......
解决办法以下:
一、先输入$ git pull origin master
//先把远程服务器github上面的文件拉下来
二、再输入
$ git push origin master
三、若是出现报错
fatal: Couldn't find remote ref master或者fatal: 'origin' does not
appear to be a git repository以及fatal: Could not read from remote
repository.
四、则须要从新输入$ 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
$ 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: 遇到错误必定不要放弃,,坚持就是胜利!~~