Git版本控制:Git远程仓库
http://blog.csdn.net/pipisorry/article/details/44671529
远程库创建总结
生成sshkey
ssh-keygen -t rsa -C "***@126.com"
Note: 如果不支持图形形式的key可以打开pub文件复制其中的内容也可以。
设置用户名
$ git config --global user.name "***"
$ git config --global user.email "***@126.com"
Note:
查看当前的git用户名以及email: git config --local --list。
设置密码
Git每次进入都需要输入用户名和密码的问题解决?如果我们git clone的下载代码的时候是连接的https://而不是git@git (ssh)的形式,当我们操作git pull/push到远程的时候,总是提示我们输入账号和密码才能操作成功,频繁的输入账号和密码会很麻烦。
进入项目目录,输入:git config --global credential.helper store
再操作一次git pull,然后它会提示你输入账号密码,这一次之后就不需要再次输入密码了。
git一般初始化流程
在github上创建完一个repository或者create a new repository on the command line
在本地的某个要使用git版本控制的目录下
git init
添加exclude
git add .
git commit -m "first commit"
git remote add origin git@github.com:***/***.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin git@github.com:***/***.git
git push -u origin master
Note: 上面就是来自在github上创建完一个repository后的提示。
git status
git status不显示本地仓库领先远端几次提交信息的解决办法
git branch --set-upstream-to origin/remote
git branch --set-upstream local origin/remote(版本1.8之前)
前提
本地创建Git仓库
(已经创建本地库[$ cd 'E:\mine\pythonworkspace' $ git init])
[Git版本控制教程 - Git本地仓库]
又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
github上注册用户
到https://github.com/注册用户并创建与本地对应的项目
Git远程仓库ssh设置
可以找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
GitHub或者gitlab网站就是提供Git仓库托管服务的,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
第1步:创建SSH Key
如果用户主目录下,已经有了.ssh目录,且包含id_rsa
和id_rsa.pub
文件,则可直接跳到第2步(最好不要重新生成了,不然之前如果在其它地方设置过,设置就无效了)。
如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "***@126.com"
Note: 需要把邮件地址换成你自己的邮件地址,一路回车,使用默认值即可,无需设置密码, 这里一般不使用密钥。
第2步:登陆GitHub设置
找到公钥 (linux: cat ~/.ssh/id_rsa.pub; windows: C:\Users\pi\.ssh)
id_rsa.pub
是公钥,可以放心地告诉任何人。
“Account settings” > “SSH Keys” > “Add SSH Key” > 填上任意Title(如pipi ubuntu) > 在Key文本框里粘贴id_rsa.pub
文件的内容 > “Add Key”
为什么GitHub需要SSH Key呢?
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到的(但只有你自己才能改)。所以,不要把敏感信息放进去。
如果你不想让别人看到Git库,有两个办法:
一个是交费,让GitHub把公开的仓库变成私有的,这样别人就看不见了。
另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。
每次 Push 的时候如何不用输入密码?
可以有2个办法:
针对 SSH 协议的方式, 配置SSH 公钥,使用 SSH 协议操作,具体见 SSH 公钥配置
对于 Https 协议
首先在全局配置保存你的密码, ~/.git-credentials (没有就创建)内添加 https://{username}:{passwd}@git.coding.net
然后配置 Git 命令存储认证,
$git config –global credential.helper store
~/.gitconfig 文件多出下面配置项:
credential.helper = store
[在GitHub多个账号上使用不同的SSH的配置方法]
修改git的传输字节限制,让git可以上传大文件
git config http.postBuffer 524288000
皮皮Blog
使用远程库
注意git管理是可以嵌套的,一个大目录(对应远程的repository1)下面可以有好多小目录(对应远程的repository2-n)。这样push后也会对应到不同远程中。好像git 2.0不会自动push子git目录的内容了。
创建远程仓库
登陆GitHub > 右上角“Create a newrepo” > 创建新的仓库 > 填写仓库名 如在Repositoryname填入python_workspace ,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库.
目前,在GitHub上的这个python_workspace仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
给远程的代码库起个别名git remote add <alias><remote address>
在本地的python_workspace仓库(当前git目录)下运行命令:
$ git remote add origin git@github.com:pplove/python_workspace.git
Note:
1. 上面的地址来自你的账户 >选择某个账户 > 点击https右边的ssh就会出现对应的ssh地址(也就是你的repository对应的ssh地址)
这里要注意地址要用ssh地址,而不是http地址!!上面列出的地址只有 origin 用的是 SSH URL 链接,只有这个仓库能推送数据上去。http不行,但是可以通过 HTTP 克隆和获取仓库的内容。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
2. 请千万注意,把上面的pplove替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。
3. 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。如果提示已经存在这个远程库名,可以改成另一个名字。
git变更项目地址
git remote set-url origin git@***.git
git remote -v
取消本地目录下关联的远程库
git remote remove origin
查看git提交和拉取地址
可以加上 -v 选项( --verbose 的简写),显示对应的克隆地址:
$ git remote -v
origin git://github.com/***/***.git (fetch)
origin git://github.com/***/***.git (push)
提交代码给远程代码库 git push <alias><branch name>
下一步,就可以把本地库的所有内容推送到远程库上:
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ 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
* [newbranch] master -> master
Branch master set up to track remote branch master fromorigin.
Note: 如果忘加master git push -u origin或者直接git push,就会报错:fatal: The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use git push --set-upstream origin master
Note:
1. 注意要先有已经commit好的本地仓库。Git本地仓库
2. 把本地库的内容推送到远程,用gitpush命令,实际上是把当前分支master推送到远程。
3.注意,如果在github上创建了一个readme.md,则先要执行git pull origin master将readme.md拉取下来,保持远程和本地数据一致,不然就会git push失败:error: failed to push some refs to 'git@github.com:...'.updates were rejected because the remote contains work that you do not have locally.
4. 推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样。
从现在起,只要本地作了提交,就可以通过命令:
git push (使用当前分支并push到远程对应分支)
git push origin dev (指定分支push)
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
Note:Git 1.x 的默认行为是matching,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。
将所有本地分支都推送到origin主机
git push --all origin
--force选项
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。
但是git pull 相当于 git fetch 加上 git merge,远程版本会将reset前的信息代入,这时,如果你不想要reset前的信息,一定要推送,可以使用--force选项。
$ git push -f 或者 git push --force origin
上面命令使用--force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force选项。
[Git本地回滚重新修改代码再push到远程问题_Jack 架构师之路-CSDN博客]
[git push冲突解决]
push之前查看push的内容
git diff origin/dev...HEAD --name-status
常用:git diff origin/master...HEAD --name-only | xargs ls -lh
Note: dev可以为任何分支名;去掉--name-status则显示每个文件的具体变化,加上则只显示有变化的文件。显示结果中D代表delete的文件;A代表add的文件;M代表modified的文件。
[使用Git如何查看即将被push上去的代码差异]
[用 strace 命令浅析 git push 通过 SSH 工作的原理]
SSH警告
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can'tbe established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了。
[Git使用上ssh协议授权]
出错处理
如果没有git commit直接git push -u origin master会报错:error: src refspec master does not match any.
从远程代码库拉取某个分支(默认是master)
查看所有远程分支:
git branch -r
pull之前查看本地和远程的区别
先更新下本地的远程分支
git fetch origin
然后可以比对
git diff --name-only HEAD FETCH_HEAD
git diff --name-only FETCH_HEAD HEAD^ #远程和本地上个版本区别
Note:
1 --name-only表示只显示修改的文件,不显示改动具体内容。
2 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git pull <alias> <branch name>
如git pull origin dev
也可以通过git pull直接拉取不指定分支,不过不在master分支上时git pull远程代码到本地可能需要先设置一下远程和本地分支的对应:
$git branch --set-upstream-to=origin/dev dev
Branch dev set up to track remote branch dev from origin.
git2.0以上的git pull规则好像是这样的:如果远程的文件比本地新(修改时间),则会与本地合并,生成<===标记的冲突来手动解决(pull后直接输入命令git mergetool);如果远程文件比本地旧,则本地文件并不会改变,仍和远程不一样。
git pull实际是git fetch和git merge,只是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。
在本地新建分支x并拉取远程代码
git fetch origin 远程分支名x:本地分支名x
其它分支的提交
>>dev
git checkout -b dev
git push -u origin dev
Git pull冲突处理
[Git冲突解决]
git子项目submodule
开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用。
为当前工程添加submodule
git submodule add 仓库地址 路径
Note:
1. 仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
2. 路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。
或者通过这样来配置:
git submodule init
git config submodule.子目录/a.url http://gitlab.aaa.com/xrec/a.git
git config submodule.b.url http://gitlab.aaa.com/xrec-pml/b.git
#如果分支里有 对应 的 submodule, 可以使用下面命令修改这个库的链接
git submodule update --remote
删除git子项目
首先删除.gitmodules文件中相应配置信息。然后git rm –cached命令将子模块所在的文件从git中删除。
下载带有submodule的工程
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
git submodule update --init --recursive
这样子模块内容下载下来后工程才不会缺少相应的文件。
从远程库克隆
之前我们是先有本地库,后有远程库的时候,学习如何关联远程库。现在我们
先创建远程库,然后从远程库克隆,这个可以实现多人合作,远程库不一定是自己创建的。
$ git clone git@github.com:pplove/***_workspace.git
clone的地址如果是ssh地址,要先进行ssh设置,否则出错:Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.
如果不想设置,当然也可以clone https地址,同样可以下载好。
$ git clone https://github.com/***.git
也可以直接下载rar压缩文件,这样下载下来的项目中没有.git,但是下载的文件最全。(git clone有时候clone不下来所有的文件,不知道项目怎么设置了,有的目录是clone不下来的)
报错:git: fatal: I don't handle protocol 'http'
在 git clone 與 https 之間雖然看起來是空白,但其實另外夾著一些字元,導致 url 無法被正常辨識。這種錯誤往往是從網頁反白複製 git url 時會出現,就連 github 也是如此。把空白刪掉重打一次 正常的空白 就恢復正常了。那段不明的字元似乎是 Zero-width space,直譯就是零寬度空白,通常用於排版或反制 url 偵測。
参见[Git版本控制教程 - Github的使用:多人协作及参与项目]
从github远程库上下载单个文件或文件夹
打开GitZip输入文件或文件夹的地址进行下载。
下载前需要添加API Access Token,否则会提示Error: url not valid。添加Token直接点击Get Token,github授权, 下载token文件后打开复制token到下图的框框中就可以成功下载了。
[其它可能的方式Download a single folder or directory from a GitHub repo]
[如何在github上下载单个文件夹?]
皮皮Blog
搭建Git服务器
在远程仓库中,我们知道远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。
搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt
命令就可以完成安装。
sudo
权限的用户账号,开始安装git
第一步,安装git
:
$ sudo apt-get install git
第二步,创建一个git
用户,用来运行git
服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git
,在/srv
目录下输入命令:
$ sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git
结尾。然后,把owner改为git
:
$ sudo chown -R git:git sample.git
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git
用户可以正常通过ssh使用git,但无法登录shell,因为我们为git
用户指定的git-shell
每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone
命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。
管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys
文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
管理权限
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。这里不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。
from:Git版本控制:Git远程仓库_皮皮blog-CSDN博客
ref:Git版本控制教程 - Github的使用
pycharm中进行git版本控制
http://www.liaoxuefeng.com/
目前世界上最为流行的代码托管网站
Git版本控制:Git远程仓库相关推荐
- git 无法 push 远程仓库 【Note about fast-forwards】
git 无法push远程仓库 Note about fast-forwards 提出问题 基本介绍 解决方案 提出问题 git push 远程仓库时,经常报出如下错误,导致无法将本地仓库中的内容提交到 ...
- git 本地与远程仓库出现代码冲突解决方法
git 本地与远程仓库出现代码冲突解决方法 参考文章: (1)git 本地与远程仓库出现代码冲突解决方法 (2)https://www.cnblogs.com/heaven-xi/p/9703566. ...
- 使用git拉取远程仓库代码
git拉取远程仓库代码 引言: 项目需要在阿里云里面拉取代码,本来以为自己会,结果好几歩都出错了,这里记录一下步骤 下载安装好git,打开Git Bash Here,进行初始化三步. 1.git in ...
- git添加/删除远程仓库
注意:仓库只有管理员建的你才有权限上传,不然自己建的也没用,没权限上传 1.远程仓库路径查询 git remote -v 2.添加远程仓库 git remote add origin <你的项目 ...
- Git 本地与远程仓库同步操作
git fetch 做了些什么 git fetch 完成了仅有的但是很重要的两步: 从远程仓库 下载 本地仓库中缺失的 提交记录 更新远程分支指针(假设为 o/master) git fetch 实际 ...
- Git撤销对远程仓库的push 或 Git撤销对远程仓库的commit提交
Git撤销对远程仓库的push 或 Git撤销对远程仓库的commit提交 [一]撤销push 执行 git log 查看日志,获取需要回退的版本号 执行 git reset –-soft <版 ...
- git 拉取远程仓库分支代码
git 拉取远程仓库分支代码 本地新建文件夹作为工作区(存放代码的文件夹) 进入该文件,右键选择 git bush here,打开命令窗后,输入初始化命令:git init 命令行:git remot ...
- 使用git同步到远程仓库
使用git同步到远程仓库 在仓库所在的目录(D:\temp\git\repository)点击右键选择"Git Bash Here",启动git bash程序. 然后在git ba ...
- git连接github远程仓库
一:设置用户名和邮箱 打开Git Bash Here 输入: git config --global user.name '用户名' git config --global user.email '邮 ...
- git版本控制、本地仓库、远程连接等操作分析
一.Git基本操作 1.1 配置 git是一个分布式版本控制系统,这意味着每个人的电脑上都是一个完整的版本库,我们不再需要将代码上传至"中央服务器上",每个人电脑里都有完整的版本库 ...
最新文章
- ajax请求返回json实例,Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
- keras用cpu加速_在训练某些网络时,Keras(Tensorflow后端)在GPU上比在CPU上慢CPU
- 肝!Python 100 例
- python怎样打开加密的文件_如何用Python 加密文件
- 数据库主从不同步_数据从不说什么
- ansible 模块_您需要了解的Ansible模块
- codeforces 707D-(DFS+bitset)
- 读取html文件转换字符串,读取HTML文件,生成HTML字符串
- 瑞星对Windows7捆绑杀毒软件等消息的回应
- jsf用于页面判断的标签_JSF –在JSF视图页面中添加标签,图像,按钮和文本字段
- 【原】unity3D之Draw Call
- MacOS新版本,不能装老版本Xcode
- 【sketchup 2021】草图大师的编辑工具2【路径跟随、偏移与轴、卷尺工具和尺寸、绘制参考线】
- centOS7下安装配置nagios
- PMP 敏捷管理相关知识点
- MacBook通过XGP玩女神异闻录5皇家版不踩坑指南
- HttpsUtil(GET/POST/DELETE/PUT)
- PAT 甲级 1108 Finding Average (20 分)
- flash ftp 注册码
- 利用随机森林对特征重要性进行评估 方法一