文章目录
Git目前是世界上最先进的分布式版本控制系统(主要用于团队协作开发),与之相似的还有SVN等…为数太多,就不一一列举啦
GIt工作原理:

workspace:是项目所在的文件目录下
Repository: 初始化下当前所在的分支
Remote:远程仓库
Index:暂存区
Git是分布式版本控制系统,没有中央服务器,每个团队的队员的电脑都是一个完整的版本库,若A修改了文件,提交到仓库的时候,B也可以看到,而且在没有网络的时候也可以进行版本升级或者回退等等
SVN是集中式版本控制系统 只用一个中央服务器,开发成员需要每次从中央服务器拉下最新的代码,然后工作,工作完后需要提交到中央服务器,需要联网才可以使用。

详细见链接:http://t.csdn.cn/YB4Mc
Git由于在国外,和国内有一道墙,下载有时候特别慢 可以用一个淘宝镜像下载:https://registry.npmmirror.com/binary.html?path=git-for-windows/

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件
当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
由于Git是分布式版本管理系统,需要用一个标识符来确认你的身份
打开git控制台输入以下命令
$ git config --global user.name "xxx"
$ git config --global user.email xxxxxx@qq.com
第一行你可以自定义一个名字,第二行定义一个邮箱地址,我用的是QQ邮箱地址
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
创建好以后就会在计算机C:\Users\Administrator 下创建一个gitconfig配置文件,可以查看配置

版本库是什么?版本库又叫仓库,也可以说是一个目录。这个文件的目录都被git管理起来,每个文件的修改,删除,git都可以进行跟踪,或者对文件进行还原
创建一个文件夹
cd vue
md sell
psw
这些是一下liux指令,可以学习一下,很方便。。。

执行***git*** init对仓库进行初始化,使这个仓库变成一个git可以管理的仓库
git init

这时候你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了

注意:Git只能跟踪文本文件,网页,所有程序的代码,像一些图片,视频二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道
我用例子来演示一遍:
1. 我在版本库sell下创建一个read.txt文件,内容:22222
2. 用git add文件名提交到暂存区

像这样就已经成功了
3. 用命令git commit 提交到仓库

4.之后可以运行 git status查看文件是否提交

5.说明没有任何文件,继续修改文件 加一行333333 继续使用 git status 结果如下:

上面显示的是文件已经被修改,但是未被提交的修改 ,如果想看被修改的文件可以执行 git diff read.txt
对内容进行查看

可以看到 文件从1111111 添加了一行222222内容 然后执行 git add git commit 提交完以后可以使用git status进行查看

提交修改命令:

我们已经学会了如何修改文件,现在我们继续对read.txt文件进行修改,再增加一行 55556666
继续执行以下指令:

现在已经对read.txt文件做了三次修改,如果想查看一下历史记录,可以执行git log:

git log从近到远显示修改的日志,如果嫌弃显示的信息过多,可以使用命令git log --pretty=oneline:

现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,可以使用2种命令,
第一种: git reset --hard HEAD^
如果想要回退到上上个版本可以用把HEAD^ 改成 HEAD^^ 以此类推。。。。
问题来了,如果我们想要退回99个版本怎么办,不可能一一退吧,可以使用第二种方法
第二种git reset --hard HEAD ~9
下面我们来操作一下,先看read.txt文件:

如果想回退到上一个版本操作如下:

在查看一下read.txt内容 执行 cat read.txt:

可以看到内容已经回退到上一个版本 继续使用git log来查看一下历史记录信息:

我们看到 第三次修改内容已经不见了,如果我想恢复第三次修改的内容如何操作呢。。。
我们可以通过版本号回退,使用命令git reset --hard 版本号,如何获取版本号执行git reflog :

通过上面我们知道 第三次修改的版本号为 Fb68641 现在我们可以执行 git reset --hard Fb68641,然后在执行cat read.txt

目前是最新版本啦

工作区:就是你在初始化git的时候的那个目录,比如我的D:\VUE\sell
版本库:就是工作区中的.git的文件,这个属于版本库,提交的版本都到了这个文件里面,一般情况下不要乱动这个文件
暂存区:就是.git文件下的一个stage 还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD
我们可以来测试一下,在read.txt下创建一个内容 Hellow word 接着在目录下创建一个test.txt 定义内容
11111:

现在把他们都提交到暂存区,再使用git status查看一下状态,如下:

然后我们一次性提交:

全部提交到了版本库。
比如说这样一种情况,我在read.txt新加了一行内容7777777,还未提交到暂存区,我发现内容有错误,
我可以用那些方法作修改:
如果以上方法都不使用,我们可以直接使用撤销命令,先用git status 查看当前的状态 然后看一下read.txt文件都有啥

可以发现文件有修改 多加了一行7777777777 但是未提交
可以执行以下的命令:git checkout – read.txt,:

可以发现777777这行内容没啦 ,那么git checkout – read.txt,命令的的意思就是 把read.txt文件在工作区的内容全部撤掉啦,不过需要注意的其他情况:
第一是还未放到暂存区,使用当前命令可以回到未修改之前状态
如果已经提交到暂存区,接着许做了修改 ,撤销就回到添加暂存区后的状态
可以用一个demo来看看效果:
我对read.txt 文件添加了一行内容 88888888 添加到暂存区 接着添加内容999999999 通过撤销命令可以看看效果:

如果git checkout – read.txt 不加-- 会变成创建分支
在版本库木下添加一个 tape.txt 文件 然后提交

可以发现提示的文件已经删除,现在有两条路可以走,
1.就是 git rm git commit 就会彻底删除版本库文件

2.输入git checkout – 文件名 进行恢复


可以看到文件已经被修改
可以访问链接:https://www.cnblogs.com/technicist/p/12951912.html
现在的情况是 我们在本地已经创建好了 Git仓库 gitee也已经创好了仓库 希望这两个仓库进行远程同步
输入 git remote add origin https://gitee.com/zyqwertyuio/zyenter-set.git 我的是这个
输入完需要写入账号和密码
然后执行git push origin master 推送到远程仓库 第一次推送需要加 -u


只需要 git clone 加上远程仓库的地址即可


GIt 每次操作不仅是一个时间线 协作开发需要多个时间线 master 这个是主分支,
我们创建一个dev分支 然后切换到dev分支上 如下操作

git checkout 加上-b 表示创建并切换 相当于如下两条命令
git branch dev
git checkout dev
git branch 会列出所有分支 有星号代表当前分支
我们在dev上进行操作 在read,txt添加一条内容 9999 接着提交

现在我们切换分支 到master

发现dev的内容不见了 因为不是dev分支
我们可以把dev内容合并到master上 执行 git merge dev

git merge命令用于合并指定分支到当前分支上,合并后,再查看readme.txt内容,可以看到,和dev分支最新提交的是完全一样的。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
接着我们可以删除 dev分支 执行 git branch -d name

可以发现,分支已经被删除
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name
先新建一个分支 名字叫dev 在read.txt 增加一行内容 然后提交 如下所示:

我们切换到master分支 新增内容 提交

我们在master合并分支

手动解决完即可 提交到远程仓库
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po