#1 git教程
# 注册git服务器用户,权限-- 注意这个和客户端用户不是一样

# 客户端(linux)提交代码到本地仓库(简单版,了解原理)
a.安装git
sudo apt-get install git b.将客户端的公钥给git服务器
-1 生成公钥
ssh-keygen -t rsa -C "youremail@example.com"
cat ~/.ssh/id_rsa.pub -2 git服务器添加客户端公钥
- 管理---》编辑设置---》身份验证---》ssh公钥---》SSH Key Actions---》上传公钥 -3 测试客户端是否可以免密码登录git服务器
ssh -T git@pha.ectrend.com/source/mobile-ecmagnet.git c.创建本地git仓库
-1 创建一个文件夹
mkdir lzptest
pwd
/home/opt/lzptest
-2 git init创建一个本地git仓库
git init Initialized empty Git repository in /home/opt/lzptest/.git/ -3 从上面可以看出本地仓库位置为: /home/opt/lzptest/.git/ 其实:git clone就已经相当于创建了一个本地仓库, 看到存在.git文件,就是成功创建了一个本地仓库
并且,默认创建了master分支 ps: 将文件拷贝到本地仓库
git status
git add . # 将文件提交到暂存区
git commit -m "upload xx file" # 将暂存区文件提交到本地仓库 # 如果已经执行过,忽略
git remote add origin https://github.com/liuzhipeng17/rest_framework_test.git # 在本地环境创建远程仓库 git push -u origin master # 将本地仓库:当前分支文件推送到远程仓库master分支 git push -u origin dev # 将本地创库:当前分支文件推送到远程仓库dev分支 d. 创建本地开发分支pc-product-dev,
mkdir lzp -- lzp和.git同级目录
cd lzp
git checkout -b pc-product-dev origin/pc-product-dev e. 关联远程仓库开发分支pc-product-dev
git branch --set-upstream pc-product-dev origin/pc-product-dev f. 将远程分支dev的代码拉取到本地分支dev上
git checkout pc-product-dev git pull d. 上传文件到本地仓库(还没有提交到git服务器呢)
-1 在本地git仓库下(即/home/opt/lzptest/目录下)创建一个文件temp.txt
/home/opt/lzptest/temp.txt -2 git add temp.txt # 可多次使用git add,添加多个文件
# 一次性添加多个文件
git add **/**.java -3 git commit -m “add temp.txt” ps:
git add temp.txt 是将temp.txt修改推送到本地git的暂存区
git commit 是将暂存区所有内容提交到本地仓库的当前分支
git push origin master是将本地仓库当前分支内容推送到远程仓库的master分支 # git服务器创建仓库(远程仓库)
省略 # 配置本地仓库和远程仓库同步(这样以后就可以实现推送文件到远程仓库)
git remote add origin git@pha.ectrend.com/source/mobile-ecmagnet.git # 将本地仓库内容推送到git服务器远程库
# 第一次推送本地master分支到远程仓库master分支,需要-u参数
git push -u origin master #git push默认是将本地master分支推送到远程仓库(哪个分支,是看origin后面的参数) # 之后,推送本地master分支到远程仓库master分支
git push origin master # 部署环境(克隆代码) a.用户向git服务器提供公钥,使得下载代码时不需要提供代码
即用户在自己的客户端执行ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git, 不需要密码 - 用户的公钥存放在哪
# 公钥和私钥是一对的(xxx 和xxx.pub,比如: id_rsa和id_rsa.pub, id_rsa_osc和id_rsa_osc.pub)
# 只要一个公钥即可
- 公钥存放的位置,ls ~/.ssh - 如果用户没有.ssh目录,或者没有秘钥。生成一个秘钥
ssh-keygen -t rsa -C "youremail@example.com" - 然后拷贝公钥(git服务器需要) cat ~/.ssh/id_rsa.pub b. git服务器如何使用客户端提供的公钥(目的是身份验证)
- 管理---》编辑设置---》身份验证---》ssh公钥---》SSH Key Actions---》上传公钥 c. 客户端免密码下载代码,克隆岛本地仓库
git clone ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git d. 安装第三包
install -r requirements.txt # 分支管理
- 经典网站
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 - 远程仓库的master分支是面向提交,head指向当前分支 - 分支管理指令
查看分支:
- 查看本地仓库分支
git branch
- 查看远程仓库分支
git remote show origin 创建分支:
- 创建本地仓库分支
git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> 将本地当前分支推送远程仓库分支
git push origin test # 不考虑分支的拉代码和上传代码
git pull
git push origin master # 考虑分支的拉代码和上传代码
-- 但是我们在团队合作中修改bug时候或者是做一个功能的时候,
我们肯定不会继续在主分支里面修改,得创建新的分支。 假设远端仓库有分支:master和dev -- 新建一个文件夹lzp, git clone: -- 创建和git远程仓库对应的分支
a. 创建本地仓库分支
git branch # 先查看有本地哪些分支
git branch pc-product-dev # 创建pc-product-dev分支 # ecmagnet的本地仓库 /home/vagrant/mobile-ecmagnet # ecmagnet远程仓库http://pha.ectrend.com/

批正: git remote add origin https://github.com/liuzhipeng17/rest_framework_test.git  # 在本地环境创建远程仓库, (错误)

应该是给远程仓库  https://github.com/liuzhipeng17/rest_framework_test.git   起别名origin, 以后origin就代指https://github.com/liuzhipeng17/rest_framework_test.git

强烈 学习推荐网站:http://www.cnblogs.com/wupeiqi/p/7295372.html

#2 git 回滚教程

# 工作区,版本库

本地工作目录: 工作区workspace
版本库: 暂存,分支 git add file.txt --->将file.txt提交到暂存区
git commit ---> 将暂存区所有的内容提交到分支上 # git 回滚功能: -- 首先git log 查看最近几次修改 commit dfe39fa5fc55a32e42b736ffac9ef0b9ecb676ea # 第二次提交
Author: liuzhipeng17 <liucpliu@sina.cn>
Date: Fri Dec :: + update codes procurement_sovled_count commit 44ad176516b5b33bd699418c7ff8ff30fce32ab2 # 第一次提交
Author: liuzhipeng17 <liucpliu@sina.cn>
Date: Fri Dec :: + add api which counts procurments have been solved 很明显现在工作区的内容为update codes procurement_sovled_count -- 回滚到提交了api后的状态,工作区的内容就不会有更新后的内容 git reset --hard 44ad176516b5b33bd699418c7ff8ff30fce32ab2 root@vagrant-ubuntu-trusty-:# git reset --hard 44ad176516b5b33bd699418c7ff8ff30fce32ab2
HEAD is now at 44ad176 add api which counts procurments have been solved -- 某天又想回滚到update codes procurement_sovled_count, 可不能用git log 来查看了, 而是git reflog
--- git log
root@vagrant-ubuntu-trusty-:/opt/mobile/lzptest/mobile-ecmagnet/mobile_ecmagnet/quote# git reflog
44ad176 HEAD@{}: reset: moving to 44ad176516b5b33bd699418c7ff8ff30fce32ab2
dfe39fa HEAD@{}: commit: update codes procurement_sovled_count
44ad176 HEAD@{}: commit: add api which counts procurments have been solved
30d11a4 HEAD@{}: checkout: moving from master to pc-product-dev
HEAD@{}: clone: from ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git --- git reset --hard dfe39fa #注意 dfe39fa HEAD@{}: commit: update codes procurement_sovled_count

git add file.txt --->将file.txt提交到暂存区  批正:将工作区file.txt提交到暂存区

放弃工作区的修改:git checkout -- test.html   放弃本地工作区test.html的修改

#3 git branch管理教程

# git 分支branch

#需求:

    -- 平台原来的PC功能:趋于稳定,但是会有bug

    -- 平台需要开发新功能: 微信开发; 预期两个月完成

    -- 可能会出现微信开发到一半,修复PC的bug

#解决方案--branch

    git branch dev          # 创建分支,并拷贝当前分支master的代码到dev分支
git checkout dev # 切换到dev分支
vim app02/view.py # 开发新功能 # 新功能开发完毕后
git checkout dev
git add .
git commit -m "新功能开发完毕" # 一定要commit,不然 git checkout master
git merge dev #将dev分支内容合并到master分支 # 情况2 git branch dev
git checkout dev
vim app02/view.py # 微信新功能开发到一半
git checkout dev
git add .
git commit -m "新功能开发一半" # 不要合并到master,只要在新功能开发完毕后,才merge到masetr # 紧急解决PC bug
git checkout master
git branch bug
git checkout bug
vim bug/views.py
git add .
git commit -m "紧急修改bug,完成" git checkout master
git merge bug #并将bug合并到master # 回到微信新功能开发
git checkout dev
vim app02/views.py # 微信新功能继续,并完成
git add .
git commit -m "继续开发完成" # 合并微信新功能到master
git checkout master
git merge dev # git merge 有时候会有冲突,需要手动修改 bug 相比master增加了一句: print "紧急修改bug" 而dev没有这一句,所以合并到master会报错,此时只有:
在dev增加同样的位置增加这一句, print "紧急修改bug"。 然后在合并 # ps 分支常用命令
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
git branch -m 分支名称 创建并切换到指定分支
git branch 查看所有分支
git branch -d 分支名称 删除分支
git merge 分支名称 将指定分支合并到当前分支

#4 git代码托管

# git代码托管 ,github 或者公司的远程仓库http://pha.ectrend.com/source/mobile-ecmagnet/

以github为例

# 公司创建github的仓库 --忽略

# 创建自己的本地仓库
cd /opt
git init # 在家,将系统代码推送到github仓库
cd /opt
git remote add origin https://github.com/WuPeiqi/pondo.git # 为地址起一个别名origin git push origin master:master # 将当前分支master内容推送到远程master分支 # 要求输入名字(除非你做了公钥) git push origin dev # 将当前分支dev内容推送githu的dev分支 # 在公司,开发新功能1
# 第一次使用,先下载代码
git clone https://github.com/WuPeiqi/pondo.git
cd /opt
git branch dev origin/dev # 创建分支并和远程分支同步 , git branch dev 也行, git checkout dev vim newfunction.py
git add .
git commit -m "公司新功能开发1" git push origin dev:dev # 提交到远程dev # 回到家后,要拉最新代码,继续开发新功能1
git checkout dev
git pull origin dev
vim newfucntion.py #
git add .
git commit -m "家里新功能开发1"
git push origin dev # 在公司
git checkout dev
git pull origin dev
git merge origin/dev # 这个是将远程分支的内容合并到当前版本库的分支上 git merge的理解: git merge dev , 将是将dev分支合并到当前分支, (所以可能在本地仓库的master和dev合并,也有可能是远程仓库origin/dev 和本地dev的合并 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执

#5 git merge(很重要)待补充

#6 git diff 查看不同

# 查看修改部分(工作区,暂存区,本地仓库,远程仓库)

--
Git diff      用于比较两次修改的差异     1.1 比较工作区与暂存区       git diff 不加参数即默认比较工作区与暂存区     1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)       git diff --cached [<path>...]     1.3 比较工作区与最新本地版本库       git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master     1.4 比较工作区与指定commit-id的差异       git diff commit-id [<path>...]     1.5 比较暂存区与指定commit-id的差异       git diff --cached [<commit-id>] [<path>...]     1.6 比较两个commit-id之间的差异       git diff [<commit-id>] [<commit-id>]

#7 windows如何生成公钥

windows下如何github ssh 公钥

. 安装git,从程序目录打开 "Git Bash"
. 键入命令:ssh-keygen -t rsa -C "email@email.com"
"email@email.com"是github账号
. 提醒你输入key的名称,输入如id_rsa
. 在C:\Documents and Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub
. 把4中生成的密钥文件复制到C:\Documents and Settings\Administrator\.ssh\ 目 录下。
. 用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚 才复制的内容。
. ^_^ OK了 需要注意步骤2中产生的密钥文件在当前用户的根目录,必须把这两个文件放到当前用户目录的“.ssh”目录下才能生效。
在windows中只能在命令行下输入创建"."开头的文件夹。命令为 mkdir .ssh

#7 git 原理图

[ecmagnet][python基础]有关git那些事的更多相关文章

  1. Python基础 | 关于“循环”那些事

    目录 for 循环 list range enumerate zip while 循环 while相当于if时 while充当for和if的混合体 泛循环 列表解析 map 迭代器 生成器 循环的跳出 ...

  2. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  3. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  4. Python基础教程【读书笔记】 - 2016/8/3

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十一波:第11章  文件和素材 本章更进一步,让程序能够接触更多的领域:文件和流.接下来介绍的函数和对象可以让你在程序 ...

  5. Python基础教程【读书笔记】 - 2016/7/31

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括 ...

  6. Python基础教程【读书笔记】 - 2016/7/7

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第四波:第5章  条件.循环和其他语句 [总览]  深入介绍条件语句和循环语句,随后会看到列表推导式如何扮演循环和条件语 ...

  7. 第一篇:python基础

    python基础   python基础 本节内容 python起源 python的发展史 为什么选择python3 第一个python程序 变量定义 表达式和运算符 用户输入 流程控制 判断 流程控制 ...

  8. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  9. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

随机推荐

  1. LeetCode Find Peak Element 找临时最大值

    Status: AcceptedRuntime: 9 ms 题意:给一个数组,用Vector容器装的,要求找到一个临时最高点,可以假设有num[-1]和num[n]两个元素,都是无穷小,那么当只有一个 ...

  2. Dll注入:x86/X64 SetThreadContext 注入

    在<Windows核心编程>第七章说到了线程优先级等知识,其中谈到了ThreadContext线程上下背景文. 其中介绍了GetThreadContext函数来查看线程内核对象的内部,并获 ...

  3. hiho一下 第三十七周 二分查找之k小数

    题目链接:http://hihocoder.com/contest/hiho37/problem/1 , 简单二分. 算法: 题目即为求一个无序数组数组中第k小的数,由于数据量太大,排序是会超时的. ...

  4. http请求头和相应头的作用

    请求头(Request Headers) Accept:application/json, text/plain, */* Accept-Encoding:gzip, deflate Accept-L ...

  5. 删除临时文件的bat文件

    @echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpde ...

  6. Linux NFS服务器的安装与配置详解

    一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...

  7. 用随机森林分类器和GBDT进行特征筛选

    一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...

  8. php微信分享demo

    php微信分享demo //定义JSSDK类 <?php class JSSDK { private $appId; private $appSecret; private $redis; pu ...

  9. tp5 修改自带success或error跳转模板页面

    tp5 修改自带success或error跳转模板页面 我们在使用tp5或者tp3.2的时候,用的成功或者失败跳转提示页面一般是用框架的.在后续开发过程中,根据实际项目需要,也是可以更改的,在此分享一 ...

  10. LeetCode#453 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [,,] 输出: 解释: 只需要3次移动(注意每次移动会增加两个 ...