git 基本知识
git是一个分布式版本控制系统,可以进行代码的管理,合并别人的代码等,最开始接触git是在GitHub网站上,号称全球最大同性交友网站,活跃着各种各样的大佬,当然也有像我这样的小白存在。
如果你看到一个项目觉得挺好的,你可以把这个项目fork下来,研究的过程中你的水平也越来越高,终于有一天你发现其实大佬的代码可以进行优化,于是你把fork的项目clone到本地,修改之后push到自己的远程仓库,接着你特别骄傲的pull request 给大佬,申请代码合并,大佬看到后觉得你写的代码还不错,就会同意merge,也就是把你修改的代码合并到已有的项目中去,于是你就出名了,也成了别人眼中的大佬。。。。
预备知识:
首先你得有一个github账号,然后你得下载git,然后傻瓜式安装即可,这里不再赘述。
1.首先主要介绍ssh的创建以及git的配置
首先设置username,email:
右键 git bash 打开,输入:
Administrator@HJS-20170911MKR MINGW64 /f/Git/kaggle (dev)
$ git config --global user.name "你的github用户名"
Administrator@HJS-20170911MKR MINGW64 /f/Git/kaggle (dev)
$ git config --global user.email "你的email"
Administrator@HJS-20170911MKR MINGW64 /f/Git/kaggle (dev)
$
2.接下来通过终端命令创建ssh key:
ssh-keygen -t rsa -C “你的email”
接下来直接三个回车就行,好像是需要设置什么密码口令,其实不用设,别人也不会无聊修改你的。。。
然后在.ssh目录下(我的是在C/users/Adimin,,HJS/.ssh目录下)生成 id_rsa.pub 和id_rsa两个文件,我们需要打开id_rsa_pub文件(用记事本或者编辑器都可以)复制里边的key,下一步要用到
3.上传ssh key 到github服务器上面
首先你要登录github账号,然后点击settings–>>添加ssh key–>>new ssh key
然后把我们刚才复制的key放到这里的key ,title随便写就行,主要是为了区分
4.连接验证
ssh -T git@github.com
如果回车之后返回的信息是Hi,,you are successfully,,,,
说明你设置对了,连接成功,接下来就可以进行接下来的操作了!
好了 我要介绍的正文开始啦~~~~~~~~
这篇文章主要是总结一下两方面的知识点:
1.把远程仓库的项目fork到本地仓库,然后在本地仓库修改之后push到远程仓库
首先你去你的github上新建一个仓库 (当然你也可以fork别人的项目),我就用我之前的study了
首先你进入到这个仓库,点击右边的那个clone or download ,然后点击clone with ssh 那个对应的地址,复制下来
接下来你就在你想要存这个仓库(项目)的文件夹下面(我是放在F盘的Git下了),在这个文件夹下右键 git bash 然后你就可以在终端秀各种操作了
pwd 可以查看当前所在的文件夹
然后
git clone git@github.com:xuanbabybaby/study.git (xuanbabybaby是我的账号 你复制你自己的就行)
复制完成100%之后 你打开你刚才存这个项目的文件夹,发现里面多了一个文件 也就是刚才我们clone下来的项目(study)
然后cd study 进入到study文件夹下,,
ls 可以用于查看当前项目包含哪些文件。
git status可以查看当前的状态
接下来我们可以在本地仓库study下面修改几个文件,也就是我们可以新建py文件 或者.txt文件都可以(test6.py)
接下来在终端输入 git add test6.py
然后git commit -m “这里写自己的描述 可以说 add a py file”
最后就可以提交到你刚才的远程仓库了 git push -u origin master
如果没什么错的话 ,你会发现在github远程仓库study下面会增加一个你刚才添加的test6.py文件!
是不是很简单呀~~~~
第二个就是 如果我们有一个远程仓库study 然后有一个本地仓库study2(注意 study2不是简单地clone study的 而是不同于study的新的存在 那么我们应该如何在本地仓库study2修改文件 同步到远程仓库study呢)
和前面步骤大致一样,我就直接写了:
在f/Git 下面新建本地仓库study2 在里面新建一个py文件比如test7.py 然后我们打开终端 进入该本地仓库
cd /f/Git/study2,接下来你输入git add test7.py是会报错的!!你需要初始化本地仓库!!git init !!! 然后你会发现本地仓库现在多了一个.git文件夹 接下来你就可以进行git add test7.py 和 git commit -m “add a test7.py”
由于我们是把一个新的本地仓库和不同于它的远程仓库建立同步 所以我们需要进行连接操作:
git remote add origin git@github.com:xuanbabybaby/study.git 后面这个是你要更新到的远程仓库的地址 你想把本地仓库修改的东西同步到哪个地方你就修改成哪个远程仓库的地址!!
接下来输入 git push -u origin matser
然后又报错了 :
$ git push -u origin master
To github.com:xuanbabybaby/study.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xuanbabybaby/study.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
之所以会出现这个错误,是因为我们自己建立的本地仓库是没有readme文件的 我们需要把两者同步:
git pull –rebase origin master
接下来你会发现自己的仓库和远程的仓库同步了,,只不过本地仓库多了一个test7.py也就是我们最开始添加的那个文件,这就和第一个问题完全一样了
最后一步就是把本地仓库修改的文件push到远程仓库:
git push -u origin master
然后你就会发现你的远程仓库下面多了一个test7.py文件
如何把大佬的文件fork下来,然后我们在本地仓库修改,然后提交到远程仓库 最后pull request 给大佬呢?
比如我把之前fork大佬的项目 kaggel clone到本地仓库 (直接在f盘下面 一会我还要删掉的)
然后进入到该文件夹下 cd kaggle
然后在本地仓库增加一个文件:test1.py 好像不能是文件夹~
git add test1.py
git commit -m "add a test2 .py"
此步可以先不弄【最后直接git push -u origin dev 这里我这样操作也成功了呢,,,,】
其实接下来的操作 按照我个人的理解就是:
因为你是fork别人的项目 所以要和大佬的保持一致?
所以需要添加大佬的远程仓库
首先看一下 git remote 看一下远程仓库的名字 origin 其实就是我们fork的项目 我们自己的远程仓库名字
接下来 我们想和大佬的远程仓库连接:
git remote add origin_online https://github.com/apachecn/kaggle.git (这个是fork大佬的项目地址)中间那个origin_online 是大佬的远程仓库名称 不过好像一般都用origin是你自己fork的项目 远程仓库名称
连接成功后:
git pull origin_online master 就可以保持同步了大佬的项目 一更新本地的也更新,是这样吗?
最后就可以push 操作了 git push origin dev 是上传到自己的repo仓库 因为是origin ~