Windows下的Git请看这里:http://www.oschina.net/p/msysgit
现在很多IT公司可能用的都是CVS,那么Git与CVS的区别在哪?git和svn最大的差异在于git是分布式的管理方式而svn是集中式的管理方式。
Git 与CVS 相比有如下优点:
支持离线工作;本地提交可以稍后提交到服务器上。Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中一样是对每个文件的。
Git 中的每个工作树都包含一个具有完整项目历史的仓库。
没有哪一个 Git 仓库会天生比其他仓库更重要。
二、Git 基本概念、命令及其使用 2.1 Git 基本概念
1) Working Directory(工作目录)
Git的工作目录是保存当前正在工作的文件所在的目录,和working tree是相同的意思。在这个目录中的文件可能会在切换branch时被GIT删除或者替换。这个目录是个临时目录,临时存储你从GIT库中取出的文件,这些文件一直会被保存,直到下次提交。
2) GIT Directory(GIT库目录)
项目的所有历史提交都被保存在了GIT库目录中,只要你不作回滚操作,它应该不会丢失。
3) GIT Index(Git索引)
Git index 可以看作是工作目录和Git库目录之间的暂存区,和staging area是相同的意思。可以使用Git index构建一组你准备一起提交的改变。Git Index和Git Staging area是同一个意思,都是指已经被add的但尚未commit的那些内容所在的区域。最简单的查看目前什么内容在index中的方法是使用git status命令。
命令中”Changes to be committed“中所列的内容是在Index中的内容,commit之后进入Git Directory。
命令中“Changed but not updated”中所列的内容是在Working Directory中的内容,add之后将进入Index。
命令中“Untracked files”中所列的内容是尚未被Git跟踪的内容,add之后进入Index。
哪些操作能够改变git index中的内容?
A). git add <path>...会将working directory中的内容添加进入git index。
B). git reset HEAD <path>...会将git index中path内容删除,重新放回working directory中。
git init 创建一个数据库。
git clone 复制一个数据到指定文件夹
git add 和 git commit 把想提交的文件add上,然后commit这些文件到本地数据库。
git pull 从服务器下载数据库,并跟自己的数据库合并。
git fetch 从服务器下载数据库,并放到新分支,不跟自己的数据库合并。
git whatchanged 查看两个分支的变化。
git branch 创建分支,查看分支,删除分支
git checkout 切换分支
git merge 合并分支,把目标分支合并到当前分支
git config 配置相关信息,例如email和name
git log 查看版本历史
git show 查看版本号对应版本的历史。如果参数是HEAD查看最新版本。
git tag 标定版本号。
git reset 恢复到之前的版本
---- mixed 是 git-reset 的默认选项,它的作用是重置索引内容,将其定位到指定的项目版本,而不改变你的工作树中的所有内容,只是提示你有哪些文件还未更新。
---- soft 选项既不触动索引的位置,也不改变工作树中的任何内容。该选项会保留你在工作树中的所有更新并使之处于待提交状态。相当于再--mixed基础上加上git add . --hard 把整个目录还原到一
个版本,包括所有文件。
git push 向其他数据库推送自己的数据库。
git status 显示当前的状态。
git mv 重命名文件或者文件夹。
git rm 删除文件或者文件夹。
git help 查看帮助,还有几个无关紧要的命令,请自己查看帮助。
此处只介绍命令,具体高级应用,请看第四节
三、Git 仓库实战 3.1 服务器端 Git 配置1) 服务器端mkdir 一个文件夹,然后cd 进入该文件夹。
zyl@project ~ $ mkdir study.git zyl@project ~ $ cd study.git/ zyl@project ~/study.git $
2) 使用 git init 创建git 仓库,ls后,目录下有 .git 即可
zyl@project ~/study.git $ git init Initialized empty Git repository in /home/zyl/study.git/.git/ zyl@project ~/study.git $ ls zyl@project ~/study.git $ ls -a . .. .git zyl@project ~/study.git $
3) 本地创建一个文件,使用git add 以及 git commit
zyl@project ~/study.git $ touch first zyl@project ~/study.git $ ls first zyl@project ~/study.git $ git add first zyl@project ~/study.git $ git commit -m "my first push" [master (root-commit) 9315d31] my first push Committer: zyl <zyl@project.lzu.edu.cn> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurat
我一直在想,在我们的中国及海外客户不断快速成长的情况下,如何能够更好地扩展他们的网站,却保持其原有网站内容及结构仍旧简单可用。
一个扩展方法便是,采用数据库副机来实现读操作,读操作在很多网站上表现为80%以上的SQL查询,但是对于游戏类网站而言,读操作的SQL查询占比不尽相同。标准的方法就是,实行读/写分离,即数据库主机实现写操作,而副机实现读操作。
这样一切工作就会很顺利,但是,当许多因素,尤其是有大量的MySQL查询出现的时候,副机会产生延迟现象,而且尤其是在游戏类、数据采集类及统计类网站中,当有大量的写操作时,情况会变的更糟糕,这样读操作会延迟数秒,甚至更长,导致用户无法正常操作、站点甚至游戏无法正常运行。
但是,若仅允许读操作在主机上实现的话,又会影响到系统扩展,所以,一些站点对读操作进行区分,重要的读操作在主机上实现,次要的在副机上实现,但问题是,很难区分出哪些是“不重要的”读操作,在游戏中区分出不重要的读操作更加困难。
若某些副机出问题的话,情况会变得更复杂,当只有几台服务器承担大量的查询负荷、复杂工作、或数据分析工作时,会使副机延迟现象加重。副机1工作正常,但是突然副机2连续一个小时滞后1分钟,然后,副机3出现代码问题,因为有人在该机执行了写操作导致复制中止,需即刻修复。
那么,如何才能够最好地处理该问题呢?
一个好的主意,就是进行动态的读/写分离,运用某个系统来监控系统的复制延迟现象,理想的情况是,在缓存中设置一些标记(旗帜),用以显示副机的真实状态并控制查询去向。基本的处理方式就是,设置一些桶(斗),用于显示延迟在1秒内、10秒内、1分钟内甚至更多的时间内的副机。
然后,带有重要读操作的代码可以检查缓存页面开始处,作出明智决定,发出读操作,先是发到延迟较短的副机,继而是延迟稍长的副机,最后是发到主机。
同其它动态控制系统一样,当负荷很重,事务/请求/答复很频繁时,系统便会失控,(更不必说有振动及其它问题产生)。最好的方式就是,从简单开始,实行有限控制,可运用卸载(甩负荷)技术,如时间延迟很长或主机读数量很大时,禁止占时较长的大型的读查询。
尽管系统不尽完善,但是能自动处理许多问题,尤其是自从配备了合适的系统监控及管理以后。在负荷高峰期,能够处理单个副机乃至整个系统的延迟问题,确保在特定条件下,能够提供最好的用户体验,并且在系统出问题时,不会带来严重的影响。
(Authored by Steve Mushero / ChinaNetCloud CEO & CTO 本博客英文原文请点此查看)
windows程序员进阶系列:《软件调试》之五:Windows操作系统概要
操作系统是计算机系统中的基本软件。它负责管理系统中的软硬件资源。通常都包括文件管理、内存管理、进程管理、打印管理、网络管理等基本功能。除此之外,支持调试也是操作系统设计的一项根本任务。
从被调试对象的角度来看,可以把操作系统的调试支持分为以下三个方面:
一:对应用程序的调试。即如何简单高效的调试运行在系统中的应用程序。
二:对设备驱动程序的调试。
三:对操作系统自身调试的支持。
本文我们会介绍Windows操作系统的架构及核心组件,加深大家对Windows系统的理解。
Windows是个典型的多任务操作系统,它允许有多个进程在系统中同时运行。
进程是资源分配和保护的基本单位。每个进程都有自己的虚拟地址空间。这保证了每个进程相互隔离互不干扰。
除了地址空间之外每个进程还包括:
一:一个全局唯一的进程ID 。
二:一个可执行映像(可执行文件)。
三:一个或多个线程。
四:一个位于内核空间中的名为_EPROCESS数据结构。用以记录该进程的关键信息,包括进程创建时间、映像文件名称等。
五:一个位于内核空间的句柄表。用以记录和索引该进程所创建的或打开的内核对象。句柄只是句柄表的索引,操作系统根据句柄表来得到指向内核对象的指针。
六:一个用于描述内存页目录