在官方http://git.kernel.org/网站可以找到linux的各种git更新记录,比如virt/kvm/kvm.git,通过这个链接,可以看到kvm的各种更新。
看我们重点关注的Linux 2.6内核的更新情况,我们知道Linux 2.6内核是由linus本人维护的,所以对应的git链接为:linux/kernel/git/torvalds/linux-2.6.git,从显示来看,这个和另外一个链接linux/kernel/git/torvalds/linux.git已经没有什么差别,估计是因为linux 3.x版本的引入以及版本仓库管理做了改进与优化,不过没关系,不影响我们继续了解这个官方web git库。
首先,查找我们关注的对应版本,这在linux/kernel/git/torvalds/linux-2.6.git页面上点击tags链接即可进入到所有版本列表,http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tags,打开界面如下:
在这个页面就能找到对应的版本,以2.6.38.8为例,对应的条目即为Linux 2.6.38-rc8:
这里有好几个链接,不过点几下会发现都链到同一处,所以我们直接看最快的路径,shortlog和log,这两个链接点开后显示的都是修改日志,只是shortlog显示得比较紧凑而已。点开shortlog:
点击第一个条目:
2011-03-08 Linus Torvalds Linux 2.6.38-rc8 v2.6.38-rc8 commit | commitdiff | tree | snapsho
的tree链接,在这里可以看到2.6.38.8的所有最终代码,也就是和从http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2下载的代码一致。
下面我们举个示例,查看一下nmi到2.6.38.8这个版本为止都大致有什么更新?
跟着“[linux/kernel/git/torvalds/linux-2.6.git] / arch / x86 / include / asm /”一路链接点一下来,到这里:
找到nmi.h文件(这个文件跟NMI相关)条目,点击后面的history链接:
可以看到,从2008-10-23到当前版本的所有变动都有了。比如第一个条目2011-01-07有对nmi做修改提交,后面的commitdiff就是提交的更新内容,diff to current当然就不要了,因为自然是commitdiff一致,而其他条目则需要diff to current,因为它们的commitdiff是与后面一个版本的不同,而diff to current是针对Linux 2.6.38-rc8的不同;如果要看从2008-10-23到Linux 2.6.38-rc8的所有更新,只需点击2008-10-23这个条目的diff to current链接即可。
上面示例比较简单,我也说得比较粗糙,主要是由于里面的链接非常的多,一个个描述起来比较麻烦,贴图太多也只是浪费我个人网站的服务器空间而已,最好的办法是自己动手去点下链接,查看一下内容,几个回合肯定就能摸索清楚个一二了。
⑵ 如何在Linux下使用Git
Git是一款开源分布式版本控制系统,能够帮助Linux管理内核开发,那么Linux要如何使用Git,下面就是Linux使用Git的方法:
*初始化git仓库,使用git init命令
*添加文件到git仓库分两步:
1、使用git add filename ;可分多次使用,添加多个文件到暂存区
2、使用git commit -m “说明” ;完成提交到分支
*查看工作区状态,使用git status 命令;如果提示有修改可使用git diff filename 查看修改内容
*HEAD指向当前版本,HEAD^表示上一个版本,HEAD^^上上一个版本……HEAD~100指向之前第100个版本。
*回退版本:使用git log查看提交历史;使用git log --pretty=oneline 精简显示
使用git reset --hard commit_id 回退到版本号为commit_id的版本
*回退版本之后如果想再看改回来,可以使用git reflog 查看历史命令,找出想改回的版本号,再使用git reset hard commit_id 返回即可。
*注意:git跟踪并管理的是修改,而不是文件,如果一个文件修改并add之后,再次修改,如果不再次add就提交的话,只会提交第一次的修改。
*撤销修改:
1、如果文件还在工作区,即没有add也没有commit,则使用git checkout -- filename 还原到服务器版即可;
2、如果已经add到暂存区,首先使用git reset HEAD filename从暂存区取回工作区,再按照1进行操作即可;
3、如果已经提交到版本库,则按照版本回退的方式进行修改即可;
4、如果已经push到远程仓库,就麻烦了
*删除使用以下命令:
1、git rm filename 从工作区删除
2、git commit -m ”说明“ 更新分支中文件进行删除
将在工作区的文件删除之后,可以使用git checkout -- filename 从分支中取回,但是只能恢复文件到最新版本,最后一次提交之后的修改则不能恢复。
*分支:
1、创建分支
git checkout -b branchname 创建并切换到改分区,相当于一下两个命令:
git branch branchname 创建分支
git checkout branchname 切换到分区
2、查看当前指向的分支:git branch 会列出所有分支,当前指向的分支之前多了个*
3、切换分支就是git checkout branchname
4、合并分支:git merge branchname 合并branchname到当前分支
5、删除分支:git branch -d branchname 删除branchname分支
注意:创建、合并、删除分支都非常快,git鼓励使用分支完成某个任务,合并后删除分支,和直接在master分支上进行工作是一样的效果,但是过程更加安全; 这些之所以快是因为在这些过程中我们只是修改了指向分支的指针,如创建一个branch就是创建了一个指向分支的指针,然后修改HEAD指向该指针;即HEAD指向分支,分支就是提交。
*冲突解决:
git无法自动合并分支时,就必须首先解决冲突;解决冲突之后,再提交,即完成了合并
使用git log --graph 可以查看分支合并图。
*保存工作现场 git stash 保存之后就可以进行其他工作 而不影响上次的修改
恢复工作现场:
1、git stash apply 恢复时并不删除stash中内容
2、git stash pop 恢复时会删除stash中的内容
*远程库信息产看使用git remote (-v)加上-v显示信息更加详细
*分支推送到远程库:即将所有本地的提交推送到远程库
git push origin(远程库名) master (要推送的分支)
*抓取分支:git pull ; git clone
*协作模式:
1、使用git push origin branchname 推送自己的修改
2、如果推送失败,因为远程分支比本地更新,先使用git pull 合并
3、如果合并有冲突,解决冲突,在本地提交
4、再推送
注意:如果使用git pull 合并时提示 ”no tracking information“说明本地分支没有和远程分支建立链接关系,使用以下指令建立关系:git branch --set -upstream branch origin/branchname
*在本地创建与远程对应的分支:git branch -b branchname origin/branchname 本地与远程分支的名称最好一致
*创建标签
1、打标签git tag name 默认标签打在最新提交的commit上,如果想打在其他版本上,找到commit_id即可
2、显示标签:git log -pretty=oneline --abbrev -commit
git tag tag_name commit_id
3、查看标签:git tag 显示所有标签
4、查看标签信息:git show tag_name
5、创建带有说明的标签: git tag -a tag_name -m ”信息“;-a表示标签名,-m指定说明文字
*操作标签:git tag -d tag_name 删除标签
推送标签到远程库:git push origin tag_name
一次推送所有标签到远程库:git push origin --tag
上面就是Linux使用Git的方法了。
⑶ 请问在LINUX中,内部命令和外部命令分别是什么
内部命令是指shell中的内置指令。并要需要安装就可以使用,默认情况下bash共有50几个内版置命令。
而外部命令与其相权反,并不属于shell本身。并不一定有的系统中就有。而且有的可以通过软件包安装得到。
⑷ Git工作流程和常用命令分享
git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。林纳斯·托瓦兹在编写第一个版本时就使用了“git”这个名称, 他将工具描述为“愚蠢的内容跟踪器”。
[图片上传失败...(image-c23291-1619063471664)]
四个专有名词:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
打开本地生成的.git隐藏文件
创建新项目gittest
创建新文件test.txt
git add <file>
git status显示有变更的文件
git restore <file> 撤回文件修改内容
git commit –m “注释”
修改内容-> 执行git diff工作区和本地仓库的差异
git log显示当前分支的版本历史
git reset --hard HEAD^ 当前版本回退到上一个版本
git reset --hard HEAD^ ^ 当前版本回退到上上一个版本
git reset --hard HEAD~100 回退到前100个版本
恢复已经删除的版本
git reflog 展示所有的提交记录
git reset --hard <版本号> 回退到指定版本
git push origin master 将本地master分支推送到远程master分支,相当于创建远程分支
git checkout -b dev = git branch dev + git checkout dev 创建并切换分支
git branch 不带参数,会列出所有本地的分支;带参数表示创建分支
git branch –d name 删除本地分支(-D表示强制删除)
git branch –r 不带参数,会列出所有远程的分支
git branch --set-upstream-to=origin/<branch本地> 本地和远程分支关联
git push origin –delete <branch> 删除远程分支
git merge release用于合并指定分支到当前分支上
注:Fast-forward表示的合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。在这种模式下,删除分支后,会丢掉分支日志信息。可以使用带参数 --no-ff来禁用”Fast forward”模式。
git merge --no-ff -m “注释”dev
git checkout release 切换release分支
vim test.txt 修改某条内容
git commit test.txt -m “release修改某条内容”
git checkout master 切换master分支
vim test.txt 修改某条同release内容
git commit test.txt -m “master修改某条内容”
git merge release 显示冲突
git status 显示冲突提示
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中>>>>release 是指release上修改的内容
vim test.txt 修改内容
git add test.txt
git commit -a -m “fix conflict”
当前分支有没有提交但也不合适现在就提交的内容,Git提供了暂储功能stash
git checkout release
vim test.txt 修改test.txt内容
git checkout develop 此时会提示Aborting
git status 查看当前状态
Git stash list 查看所有暂储列表
git stash apply恢复,恢复后stash内容并不删除,你需要使用命令git stash drop来删除;
另一种方式是使用git stash pop,恢复的同时把stash内容也删除了
创建Git Tag并推送远程服务器
git tag -a V1.0.0 –m“注释” //创建TAG
git push origin V1.0.0 //推送到远程服务器
git push origin --tag //提交所有tag至服务器
git tag -d V1.0.0 //删除本地标签
git push origin --delete tag <tagname> //删除远程标签
HEAD,它始终指向当前所处分支的最新的提交点。你所处的分支变化了,或者产生了新的提交点,HEAD就会跟着改变
add相关命令很简单,主要实现将工作区修改的内容提交到暂存区,交由git管理。
git add .添加当前目录的所有文件到暂存区
git add 添加指定目录到暂存区,包括子目录
git add 添加指定文件到暂存区
commit相关命令也很简单,主要实现将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。
git commit -m 提交暂存区到本地仓库,message代表说明信息
git commit --amend -m 使用一次新的commit,替代上一次提交
上传本地仓库分支到远程仓库分支,实现同步。
git push 上传本地指定分支到远程仓库
git push --force强行推送当前分支到远程仓库,即使有冲突
git push --all推送所有分支到远程仓库
关于分支,大概有展示分支,切换分支,创建分支,删除分支这四种操作。
git branch列出所有本地分支
git branch -r列出所有远程分支
git branch -a列出所有本地分支和远程分支
git branch 新建一个分支,但依然停留在当前分支
git checkout -b 新建一个分支,并切换到该分支
git checkout 切换到指定分支,并更新工作区
git branch -d 删除分支
git push origin --delete 删除远程分支
关于分支的操作虽然比较多,但都比较简单好记
merge命令把不同的分支合并起来。在实际开放中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过R3,R4,R5的commit记录,最后开发完成需要合入master中,这便用到了merge。
git merge 合并指定分支到当前分支
注:如果在merge之后,出现conflict,主要是因为两个用户修改了同一文件的同一块区域。需要针对冲突情况,手动解除冲突。
rebase又称为衍合,是合并的另外一种选择。
在开始阶段,我们处于new分支上,执行git rebase dev,那么new分支上新的commit都在dev分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。
git rebase dev,通俗的解释就是new分支想站在dev的肩膀上继续下去。
rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。
rebase也需要手动解决冲突。
1.如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
2.如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge
reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。
git reset —soft 只改变提交点,暂存区和工作目录的内容都不改变
git reset —mixed 改变提交点,同时改变暂存区的内容
git reset —hard 暂存区、工作区的内容都会被修改到与提交点完全一致的状态
git revert用一个新提交来消除一个历史提交所做的任何修改。
在回滚这一操作上看,效果差不多。git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
在 Git工作区的根目录创建一个特殊的.gitignore文件。
在.gitignore文件中,添加需要忽略的文件。
git rm -r --cached . //将仓库中的index递归删除
git add . //重新添加仓库索引
git commit -m “update git.ignore” //提交
git branch --set-upstream-to=origin/<branch> <branch> //重现将本地仓库和远程仓库关联
最后,如果此篇博文对你有所帮助,别忘了点个赞哟~
⑸ linux系统下怎么使用git
git命令是用来管理文件的程序,它十分类似DOS下的Norton Commander,具有互动式操作界面。它的操作方法和Norton Commander几乎一样:
git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update
git add:是将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,例:'git add app/model/user.rb'就会增加app/model/user.rb文件到Git的索引中
git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'
git commit:提交当前工作空间的修改内容,类似于SVN的commit命令,例如'git commit -m story #3, add user model',提交的时候必须用-m来输入一条提交信息
git push:将本地commit的代码更新到远程版本库中,例如'git push origin'就会将本地的代码更新到名为orgin的远程版本库中
git log:查看历史日志
git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert ',Git的版本号都是生成的一个哈希值
git branch:对分支的增、删、查等操作,例如'git branch new_branch'会从当前的工作版本创建一个叫做new_branch的新分支,'git branch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支
git checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如'git checkout new_branch'就会切换到new_branch的分支上去;另一个功能是还原代码的作用,例如'git checkout app/model/user.rb'就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚
git rebase:用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能
⑹ git教程是什么
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
(6)linuxdiffgit扩展阅读:
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
参考资料:网络-GIT
⑺ diff命令和patch命令的使用
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。
diff命令的格式一般为:
diff [参数][文件或者目录1][文件或者目录2]
例如,有文件凯竖历test1和test2:
将会输出:
格式的含义如注释所示。
diff 的normal 显示格式有三种提示:
a - add
c - change
d - delete
比较常用的是以合并的方式显示两个文件的不同:
输出如:
这种输出方式输出的内容可以用于使用patch命令进行打补丁包。patch命令我们稍后再看。
diff命令也可以比较两个文件夹的不同:
例如有两个文件夹testa和纤嫌test,将test1和test2放进去:
得到:
第一部分是文件的信息
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分表示变动的位置
@@ -1,11 +1,5 @@
减号表示第一个文件,后面的表示第一行起一共11行。加号表示第二个文件。后面是第一行起一共5行。
接下来的表示区别的部分。
例如:
将得到:
这种模式中
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
我们可以先用diff命令生成patch文件。然后使用patch命令将第二盯搜个文件内容修改成第一个文件的内容。
例如上述的test1和test2:
之后test2的内容就会和test1内容一致了。
svn diff生成的patch也可以用于更新文件