github踩坑之git命令收集与整理(windows)
最近开始又捡起git,第一家公司用的就是git,一直掌握的也不深刻,就知道常用的几个命令,虽然现在用svn,但是觉得git还是不能丢,遂又捡起来了。先总结一部分目前练习用到的,慢慢填补吧~
github荒废太久了,偶尔也需要拔拔杂草什么的,而且最近学react,正好可以上传些demo。git都是新下的,而且以前用的是unix系统操作,现在用windows操作相当于重头再来了。
首先,git安装好了就打开cmd,输入git/git --version试一下。
接下来可以进行配置啦~(设置全局的用户名与email)
git config --global user.name "xxx" git config --global user.email "xxx"
git config --global push.default simple
使用git需要进行推送,则最后一步一定要进行配置。git 2.0更改push.default为simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。
我在github有新建一个库,所以直接进入本地存放git项目的目录,git init初始化下(以便git对该目录下文件进行版本控制),直接git clone xxx.git了(即把我github上的库克隆到本地,这个目录在github上的项目里可以看到~)
把想加的文件添加到文件夹里,执行git add 文件夹/
git add 主要用于把我们要提交文件的信息添加到暂存区中
git add <path> 把<path>添加到索引库(<path>可以是文件也可以是目录)
git add . 把工作时的所有变化提交到暂存区,包括内容修改(modified)和新文件(new),但不包括删除的文件
git add -u 仅监控已经add的文件(即tracked文件),他会将被修改的文件存到暂存区,但不会提交新文件(untracked)
git add -A 提交所有变化到暂存区
git status 可以时刻看见仓库状态,有什么文件被修改被删除等等。。。
但素,出问题了!!warning IF will be replaced by CRLF 查了下,windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以会出现提示。
解决办法:http://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf
即:(设置换行符转换)
git config core.autocrlf false
问题解决啦~可以正常add啦,下一步git commit(将暂存区的内容添加到本地仓库中)
git commit -m <message> 将添加到暂存区的内容,进行提交
git commit -a -m <message> 能提交修改过但没有放到暂存区的内容
我用的是git commit -m 'add react demo',but又粗错啦!! error:xxx did not match any file(s) known to git 说是不匹配呢
解决办法:据说windows下应该换成双引号,换了试下,果然好用,提交完成。
git push(将本地内容提交到远程),!! No configured push destination 原来是没有配置远程地址,好的,配吧(解决办法):
git remote add origin git@github.com:xiabiande/object.git 然后git push。。。你没猜错又遇到问题了,permission denied (publickey) 没有权限
遂查之~,(参考:http://blog.itpub.net/25851087/viewspace-1262468/)要生成密钥上传github并进行网络连通性测试 ssh-keygen -t rsa -C "xiabiande@xx.com" ,如果此时说该命令不是内部命令,就去 某盘/git/usr/bin/ 找到ssh-keygen.exe 并把该路径粘贴到配置环境变量的系统变量path的最后(别忘了前面加;)
再使用刚才的命令后,生成两个文件id_rsa(私钥)和id_rsa.pub(公钥),将id_rsa.pub的内容上传到github的ssh-keys管理中,最好用笔记本打开,如果上传时说你没有以ssh-开头什么的就说明,公钥的文件格式被你改变了,所以最好用笔记本打开{血与泪的教训,科科} 接下来,执行ssh -T git@github.com 进行本地与网站的连接测试。嘿~我成功的连上了,连上了~并且和我打了招呼:hi~xx!You've successfully authenticated, but GitHub does not provide shell access ,呵呵,没有提供权限,好吧
解决方法:git remote set-url origin git@github.com:xiabiande/object.git 重新加一下远程地址 (http://stackoverflow.com/questions/26953071/github-authentication-failed-github-does-not-provide-shell-access)
ok,这时候还是不可以push的,因为提示你,要先pull才可以,git pull origin master 将远程的主分支down下来,正常这句话还可以合并本地内容,但是 !!fatal:refusing to merge unrelated histories 说是拒绝合并不相关的历史,确实本地是新加的内容还重未和线上连接过。
解决办法:git pull origin master --allow-unrelated-histories 就是告诉系统我允许合并不相关历史的内容。
git push 系统提示 git push --set-upstream origin master 因为是第一次push,所以按它提示的来就好啦。
耶耶,终于可以push啦,我的小demo,我的天~hoho,我真是太棒了【此刻,想配一张陈意涵阳光灿烂的笑容脸】
其实只要有耐心,没什么解决不了的困难嘛~
/* 2017/01/10更 */
补充:windows用户请注意,windows用户请注意
1. 如果你在操作commit时遇到pathspec XXX did not match any files commit这个问题,git commit后面的提交信息要用双引号啊!!(或者你可以调一下全局的core.autocrlf false)
git config --global core.autocrlf false
2.如果你在add时遇到unable to stat ... Filename too long 这个问题时,windows真的挺坑的,windows的限制是不一样的啦,详情:http://stackoverflow.com/questions/22575662/filename-too-long-in-git-for-windows
git config --system core.longpaths true