git

1. 版本控制

是否依稀记得你的毕业论文?

1
2
3
4
5
6
7
8
9
10
11
毕业论文_初稿.doc
毕业论文_修改1.doc
毕业论文_修改2.doc
毕业论文_修改3.doc
毕业论文_完整版1.doc
毕业论文_完整版2.doc
毕业论文_完整版3.doc
毕业论文_最终版1.doc
毕业论文_最终版2.doc
毕业论文_死也不改版.doc
...

是否还记得老师让你重新自己写的项目?

1
2
3
4
5
blog1
blog2
blog3
blog4
...

以上是使用文件或文件夹进行版本管理,以上方式有缺点:

  • 多个文件,保留所有版本时,需要将多个文件保存在本地
  • 协同操作,多人协同操作时,需要将文件发来发去...
  • 容易丢失,被删除意味着永远失去(可以选择网盘)

为了解决上述问题,应运而生了版本管理工具:

  • VSS-- Visual Source Safe
    此工具是Microsoft提供的,是使用的相当普遍的工具之一,他可以与VS.net进行无缝集成,成为了独立开发人员和小型开发团队所适合的工具,基本上Window平台上开发的中小型企业,当规模较大后,其性能通常是无法忍受的,对分支与并行开发支持的比较有限。
  • CVS--Concurrent Versions System
    此工具是一个开源工具,与后面提到的SVN是同一个厂家:Collab.Net提供的。CVS是源于unix的版本控制工具,对于CVS的安装和使用最好对unix的系统有所了解能更容易学习,CVS的服务器管理需要进行各种命令行操作。目前,CVS的客户端有winCVS的图形化界面,服务器端也有CVSNT的版本,易用性正在提高。
  • SVN --CollabNet Subversion
    此工具是在CVS 的基础上,由CollabNet提供开发的,也是开源工具,应用比较广泛。他修正cvs的一些局限性,适用范围同cvs,目前有一些基于SVN的第三方工具,如TortoiseSVN,是其客户端程序,使用的也相当广泛。在权限管理,分支合并等方面做的很出色,他可以与Apache集成在一起进行用户认证。不过在权限管理方面目前还没有个很好用的界面化工具,SVNManger对于已经使用SVN进行配置的项目来说,基本上是无法应用的,但对于从头开始的项目是可以的,功能比较强大,但是搭建svnManger比较麻烦。是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。
  • BitKeeper
    是由BitMover公司提供的,BitKeeper自称是“分布式”可扩缩SCM系统。不是采用C/S结构,而是采用P2P结构来实现的,同样支持变更任务,所有变更集的操作都是原子的,与svn,cvs一致。
  • GIT
    Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。

版本管理工具都一般包含客户端和服务端:

  • 客户端(用户):本地编写内容,向服务端获取或提交内容
  • 服务端(网盘):保存所有版本的文件

2. 什么是GIT   

GIT
    Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。

GitHub等
    GitHub、GitCafe、BitBucket和GitLab等是基于Git版本控制的远程文件托管平台。

使用场景:
    - 无远程:在本地 .git 文件夹内维护历时文件
    - 有远程:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

PS: 
    集中式:远程服务器保存所有版本,用户客户端有某个版本
    分布式:远程服务器保存所有版本,用户客户端有所有版本

3. 安装Git

参见:http://git-scm.com/

PS: 注册GitHub、GitCafe、BitBucket和GitLab等账户,以便于将文件托管在远程。

4. Git使用

              - 开发写代码
骑兵
步兵
勤兵 - 进入程序目录 git init - 初始化,初始化之后会在本地创建一个.git的目录,用于保存git相关信息,如:版本,日志等... git status - 查看当前状态 git add <file> - 将文件从《工作区》提交到《暂存区》 git commit -m "提交信息" - 将文件从《暂存区》提交到《版本库 》 git rm --cached <file> - 将文件从《暂存区》或《版本库》删除文件
工作区:ls - 查看工作区
暂存区:git ls-files -s - 查看暂存区和版本库
版本库:git ls-tree HEAD - 查看版本库

阶段一:创业初期

             在原来代码工作区操作,开发了半个月后,临时发现线上程序有bug需要马上修复,怎么办?
答案:保留开发到一半的代码,从线上拷贝一份代码到其他路径,在原来基础上修改bug,提交;再次回到正在开发的路径继续写代码...
Git解决方法:利用分支,Git中的分支相当于拷贝一份代码,应用方法以及场景如下: 【代码已上线】
已上线代码在master分支上(默认创建分支) 【开发新功能到一半】
git branch dev 【创建新分支】
git checkout dev 【切换进入dev分支】
开发程序,仅在dev分支中修改文件,不影响其他分支....
开发到一半时,突然出现一个bug需要紧急修复 【将已经开发的功能先提交】
git add .
git commit -m '临时提交开发到一半的代码'
或【将已开发的功能先临时保存】
git stash
git stash list 查看都有哪些临时保存列表
git stash apply 从临时列表中取出
git stash drop 从临时列表中删除 【临时修复bug】
git checkout master 【切换到master分支】
修复bug并提交
git add .
git commit -m '紧急修复bug'
创建新分支,修复bug并提交,合并到master分支
git branch bug
git checkout bug
修复bug...
git add .
git commit -m '紧急修复bug'
git checkout master
git merge bug 【继续开发新功能】
git checkout dev
开发完毕,上线
git checkout master
git merge dev Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.
出现冲突,解决冲突
git add .
git commit -m '解决冲突'

阶段二:新功能开发,开发直播功能(预计开发一个月)

              在公司

                【创建远程仓库project】
注册github,并在其中创建一个project,创建成功后会给当前project生成一个URL用于让本地和远程连接,如:http://47.93.4.198/wupeiqi/pondo.git 【添加远程仓库URL】
本地执行命令,添加远程连接:git remote add origin http://47.93.4.198/wupeiqi/pondo.git 【将本地分支内容推送到远程仓库】
git push -u origin master PS: 首次推送需要将本地分支同步到远程分支
git push --set-upstream origin master
git push --set-upstream origin dev 回家
【从远程仓库克隆到本地某个目录】
git clone http://47.93.4.198/wupeiqi/pondo.git
cd pondo 【clone后本地只有master分支,同步其他分支】
git branch dev origin/dev
git checkout dev 【在家继续开发】
... 【提交到远程版本库】
git add .
git commit -m '在家开发' 第二天到公司
【从远程仓库获取最新内容】
git pull origin dev

git fetch origin dev
git merge origin/dev
【继续开发功能】
...
【提交到远程版本库】
git add .
git commit -m '在家开发' 第二天回家:
【从远程仓库获取最新内容】
git pull origin dev

git fetch origin dev
git merge origin/dev
【继续开发功能】
...
【提交到远程版本库】
git add .
git commit -m '在家开发' 重复进行中.... PS: 如果本地有未提交的内容,则需要
- git stash先暂时存储
- git pull origin dev 从远程获取最新代码
- git stash pop 将暂时存储代码和最新代码进行合并,解决冲突 如果在公司的代码只是commit,忘记push到远程;在家又新开发了功能;再次回到公司时,则需要:
- git pull origin dev
- 解决冲突
- git add .
- git commit -m '解决冲突'
- git push origin dev
此次会把上次忘记push和本次解决冲突一起提交到远程

阶段三:项目保存在公司电脑中,缺点:电脑硬盘损坏则代码丢失;在家里电脑无法继续开发。

Github 普通操作的流程
1、注册github账号
2、在Github上创建一个库
3、在本地文件中先进行初始化【git init】
4、把本地文件添加到暂存区【git add .】
5、把暂存区的文件提交的分支【git commit -m '备注'】
6、创建用户名和邮件
7、把网上的仓库的链接设置一个别名【git remote add origin 远程连接】
8、向云仓库推文件【git push origin master】
9、下载从云仓库克隆【git clone 远程仓库的连接】
10、下载后创建分支【git branch 分支名】
11、切换分支【git checkout 分支名】
12、编写代码
13、更新最新的内容【git add .】
14、把暂存区的提交到分支【git commit -m ‘备注’】
15、把内容推上云仓库中【git push origin 新创建的分支】

  

5. 常用命令:

1
2
3
4
5
6
7
8
9
10
11
cd                                                  - 进入程序目录
git init                                            - 创建一个空的Git仓库或重新初始化一个现有的
git config --global user.name "John Doe"            - 设置用户名
git config --global user.email johndoe@example.com  - 设置电子邮件地址
git status                                          - 查看状态
git add [file]                                      - 将文件从《工作区》提交到《暂存区》
git commit -"提交信息"                            - 将文件从《暂存区》提交到《版本库 》
git rm --cached <file>                                - 将文件从《暂存区》或《版本库》删除文件
工作区:ls                                          - 查看工作区
暂存区:git ls-files -s                             - 查看暂存区和版本库
版本库:git ls-tree HEAD                            - 查看版本库<code class="python comments"><br></code>
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
git init                  #初始化
git add manage.py         #提交单个文件
git add .                 #提交所有文件
git commit -"all file"  #提交注释
git status                #状态
git ls-tree head          #查看版本中所有文件
git ls-files -s           #查看暂存区和版本中所有文件
git log                   #查看日志
git reflog                #查看所有日志
git stash                 #将当前修改的内容保存到一个地方
git reset  版本号          #默认等于git reset --mix 版本号
#配置用户信息
git config --local user.name '名称'
git config --local user.email '邮箱'
#回滚
git log
git reset --head 2b349bf
#查看所有日志回滚
git reflog
git reset --head 2b349bf

回滚: 

1
2
3
4
5
6
7
8
9
#方式一: (三步操作)
    git reset --soft 版本号  #从分支回到暂存区
    git reset head 文件     #从暂存区回到修改过的内容
    git check out  文件     #从修改过的文件到原文件
#方式二: (两部步操作)
    git reset --mix 版本号  #从分支回到修改过的内容 == git reset 版本号
    git check out  文件     #从修改过的文件到原文件
#方式三: (一部步操作)
    git reset --hard 版本号  #从分支回到原文件

图示:

6.场景

在原来代码工作区操作,开发了半个月后,临时发现线上程序有bug需要马上修复,怎么办?
答案:保留开发到一半的代码,从线上拷贝一份代码到其他路径,在原来基础上修改bug,提交;再次回到正在开发的路径继续写代码...
Git解决方法:利用分支,Git中的分支相当于拷贝一份代码,应用方法以及场景如下: 【代码已上线】
已上线代码在master分支上(默认创建分支) 【开发新功能到一半】
git branch dev 【创建新分支】
git checkout dev 【切换进入dev分支】
开发程序,仅在dev分支中修改文件,不影响其他分支....
开发到一半时,突然出现一个bug需要紧急修复 【将已经开发的功能先提交】
git add .
git commit -m '临时提交开发到一半的代码'
或【将已开发的功能先临时保存】
git stash
git stash list 查看都有哪些临时保存列表
git stash apply 从临时列表中取出
git stash drop 从临时列表中删除 【临时修复bug】
git checkout master 【切换到master分支】
修复bug并提交
git add .
git commit -m '紧急修复bug'
创建新分支,修复bug并提交,合并到master分支
git branch bug
git checkout bug
修复bug...
git add .
git commit -m '紧急修复bug'
git checkout master
git merge bug 【继续开发新功能】
git checkout dev
开发完毕,上线
git checkout master
git merge dev Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.
出现冲突,解决冲突
git add .
git commit -m '解决冲突'

新功能开发,开发直播功能(预计开发一个月)

   【创建远程仓库project】
注册github,并在其中创建一个project,创建成功后会给当前project生成一个URL用于让本地和远程连接,如:http://47.93.4.198/wupeiqi/pondo.git 【添加远程仓库URL】
本地执行命令,添加远程连接:git remote add origin http://47.93.4.198/wupeiqi/pondo.git 【将本地分支内容推送到远程仓库】
git push -u origin master PS: 首次推送需要将本地分支同步到远程分支
git push --set-upstream origin master
git push --set-upstream origin dev 回家
【从远程仓库克隆到本地某个目录】
git clone http://47.93.4.198/wupeiqi/pondo.git
cd pondo 【clone后本地只有master分支,同步其他分支】
git branch dev origin/dev
git checkout dev 【在家继续开发】
... 【提交到远程版本库】
git add .
git commit -m '在家开发' 第二天到公司
【从远程仓库获取最新内容】
git pull origin dev

git fetch origin dev
git merge origin/dev
【继续开发功能】
...
【提交到远程版本库】
git add .
git commit -m '在家开发' 第二天回家:
【从远程仓库获取最新内容】
git pull origin dev

git fetch origin dev
git merge origin/dev
【继续开发功能】
...
【提交到远程版本库】
git add .
git commit -m '在家开发' 重复进行中.... PS: 如果本地有未提交的内容,则需要
- git stash先暂时存储
- git pull origin dev 从远程获取最新代码
- git stash pop 将暂时存储代码和最新代码进行合并,解决冲突 如果在公司的代码只是commit,忘记push到远程;在家又新开发了功能;再次回到公司时,则需要:
- git pull origin dev
- 解决冲突
- git add .
- git commit -m '解决冲突'
- git push origin dev
此次会把上次忘记push和本次解决冲突一起提交到远程

项目保存在公司电脑中,缺点:电脑硬盘损坏则代码丢失;在家里电脑无法继续开发。

7.冲突:

  解决方法:

  第一种方式:stash

  第二种方式:分支 branch

8.协同开发:

第一步:进入官网

https://github.com/

第二步:创建组织

第三步:添加组织名字、邮箱地址

第四步:添加开发成员

第五步:创建知识库地址

第六步:完成

9.fork:

第一步:点击fork生成

第二步:clone本地进行修改

第三步:new pull request

10. .gitignore

https://github.com/github/gitignore/blob/master/Python.gitignore

注意:协同开发时,在解决完冲突之后,应该跟上一个提交的人进行沟通。

python github的更多相关文章

  1. python --github 刷题

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? import r ...

  2. Python GitHub上星星数量最多的项目

    GitHub上星星数量最多的项目 """ most_popular.py 查看GitHub上获得星星最多的项目都是用什么语言写的 """ i ...

  3. 28款GitHub最流行的开源机器学习项目

    现在机器学习逐渐成为行业热门,经过二十几年的发展,机器学习目前也有了十分广泛的应用,如:数据挖掘.计算机视觉.自然语言处理.生物特征识别.搜索引擎.医学诊断.DNA序列测序.语音和手写识别.战略游戏和 ...

  4. python DNS域名轮询业务监控

    应用场景: 目前DNS支持一个域名对应多个IP的解析,优势是可以起到负载均衡的作用,最大的问题是目标主机不可用时无法自动剔除,因此必须在自己的业务端写好监控与发现,怎么样来做这样的监控,以python ...

  5. python实战===2017年30个惊艳的Python开源项目 (转)

    本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...

  6. 用python做分布式定时器

    分布式任务系统 (Python) github地址 https://github.com/thomashuang/Lilac/blob/master/README.rst 这里将介绍Liac的设计架构 ...

  7. python线程条件变量Condition(31)

    对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition. 一.线程条件变 ...

  8. 不给糖果就捣乱,用Python绘制有趣的万圣节南瓜怪【华为云分享】

    关于万圣节 万圣节又叫诸圣节,在每年的11月1日,是西方的传统节日:而万圣节前夜的10月31日是这个节日最热闹的时刻.在中文里,常常把万圣节前夜(Halloween)讹译为万圣节(All Saints ...

  9. 用生动的案例一步步带你学会python多线程模块

    鱼和熊掌不可兼得 鱼,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍鱼而取熊掌者也. 从6月开始写公众号,连着四个月一直尽量保证一周五更,结果整天熬夜搞的身体素质骤降.十一休假决定暂时将公众号放放,好好 ...

随机推荐

  1. 优先级队列用法详解(priority_queue)

    由于优先级队列的内部数据结构为 堆,所以这里先介绍堆的一些操作. 堆的一些函数操作在algorithm头文件中 //在[first, last)范围内构造最大堆,first,last 可以是vecto ...

  2. 网站转变风格的css变化

    网站换肤,是一个比较老的话题了,理论很清晰,就是要根据js 来变换文件加载的css文件,根据需求来加载不同的css文件,有了这个基础就很明确要怎么做了,但是实际上还要记录当前用户的cookie  保证 ...

  3. python web开发-flask中日志的使用

    Flask使用日志记录的方式: 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用l ...

  4. JS常用函数用途小记

    concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var a = [1,2,3]; document.write(a.concat(4,5) ...

  5. 笔记:Spring Cloud Hystrix 服务容错保护

    由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加 ...

  6. 【漏洞】PHPCMS_V9.6.0 前台注册GETSHELL

    首先准备一台公网服务器,在上面新建一个一句话的txt文件.如下: 接着打开目标网站,点击注册,填写信息后点击提交,拦截该数据包. 将其中post提交的数据替换成我们的poc,poc如下: siteid ...

  7. [译文] SQL JOIN,你想知道的应该都有

    介绍 这是一篇阐述SQL JOINs的文章. 背景 我是个不喜欢抽象的人,一图胜千言.我在网上查找了所有的关于SQL JOIN的解释,但是没有找到一篇能用图像形象描述的. 有些是有图片的但是他们没有覆 ...

  8. 读headFirst设计模式 - 观察者模式

    上次学习了策略模式,这次来学习观察者模式.这次先把书上的例子学习一下,然后再自己写一个例子,看是否能做到举一反三(或者说触类旁通),不过要想真正的掌握还要多多思考和练习. 学习书上的例子 现在我们有一 ...

  9. 【Linux】积累笔记

    ■ 关于查看系统的一些版本信息 查看系统的发行版本可以用 cat /etc/issue 或者 cat /etc/redhat-release (Centos上) 查看系统的内核版本以及系统位数 una ...

  10. matlab: 数据的读写

    读取数据的方法 读取.txt数据 如果.txt是按照矩阵顺序保存的一个数组,可以用textread()函数来读取: GAP=textread('continua.txt'); 读取.fig图中的数据 ...