• git的使用


    简介

    什么是Git

    Git是一款先进的分布式版本控制系统。

    什么是版本控制?

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。如果你需要对一个文件做长时间的修改,版本控制系统十分适合你,有了它就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改,删的删了,这也没有关系,你也照样可以很容易地就恢复到原先的样子。但额外增加的工作量却微乎其微。

    分布式和集中式

    集中式的版本控制放在了中央处理器,这就造成了每次想要修改文件都需要向中央处理器把文件拿过来,然后再提交过去,中央处理器保存修改的记录,这就需要联网,而分布式的没有中央处理器,每个人的电脑都有版本控制,这使得一次下载,可以重复修改,并且在本地记录着修改,不需要联网,另外因为版本控制在个人电脑的缘故,也更分布式版本管理安全。

    本地项目上传至github

    1、创建本地版本库 Bash

    <1>创建一个文件夹$ mkdir test, 并进入文件夹cd test
    <2>使文件夹编程可管理的仓库$ git init,这时当前文件夹test下会生成一个,git文件用于管理和跟踪版本库
    <3>将需要上传的文件拷贝到test文件夹下,并建立上传到本地仓库

    • $ git add .将文件上传到暂存区
    • $ git commit -m 'first commit' 将暂存区文件上传到本地仓库
      另外可以随之使用$ git status查看当前状态

    2、github上创建远程仓库

    <1> 创建ssh key 密钥,为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。如果本地没有.ssh文件夹的话,需要在bash中创建ssh密钥$ ssh-keygen -t rsa -C "youremail@example.com"
    <2> 添加ssh key 密钥 在github中的个人主页setting,再选中里面的SSH and GPG KEYS,点击右上角的New SSH key,然后Title里面随便填,再把刚才.ss文件夹下的id_rsa.pub里面的内容复制到Title下面的Key内容框里面,最后点击Add SSH key,这样就完成了SSH Key的加密。
    <3> 创建一个名为test的仓库

    关联仓库

    1 内容关联

    在Github上创建好Git仓库之后我们就可以和本地仓库进行关联了,根据创建好的Git仓库页面的提示,可以在本地TEST仓库的命令行输入:$ git remote add origin https://github.com/xxx/xxx.git

    2 内容推送

    $ git push -u origin master由于新建的远程仓库是空的,所以要加上-u这个参数,等远程仓库里面有了内容之后,下次再从本地库上传内容的时候只需下面这样就可以了:$ git push origin master

    3 内容合并

    如果在github创建的仓库中存在其他文件,那么如果直接关联仓库就会报错,failed to push some refs to https://github.com/xxx/xxx.git,那是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,
    这时我们可以通过以下命令先将内容合并以下$ git pull --rebase origin master
    在合并的时候由于两个仓库不相关联,可能会出错fatal: refusing to merge unrelated histories,我们强制从远程仓库拉下来合并$ git --allow-unrelated-histories,合并之后在提交

    常用命令

    生成git管理的仓库

    • $ mkdir 文件夹创建文件夹
    • $ cd 文件夹进入目录
    • $ ls 查看当前工作目录下的文件
    • $ pwd 查看当前文件路径
    • $ git init将文件变成可管理的仓库
    • $ git status查看git当前状态
    • $ touch 文件名创建文件
    • git remote add origin url 关联远程仓库 url为远程仓库的链接

    日志以及分支:

    • git push origin test 推送本地分支到远程仓库
    • git rm -r --cached 文件/文件夹名字 取消文件被版本控制
    • git reflog 获取执行过的命令
    • git log --graph 查看分支合并图
    • git merge --no-ff -m '合并描述' 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录
    • git check-ignore -v 文件名 查看忽略规则
    • git add -f 文件名 强制将文件提交

    删除

    • 删除暂存区$ git rm --cach 文件名
    • 删除工作区$ rm 文件名
    • 如果删除文件夹 需要加一个-r表示递归删除文件

    提交到远程仓库

    • $git push origin master上传信息到远程仓库

    回退操作

    • git reset --hard HEAD^ 回退到上一个版本
    • git reset --hard ahdhs1(commit_id) 回退到某个版本
    • git checkout -- file撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态)
    • git reset HEAD file 撤回暂存区的文件修改到工作区

    编辑文件

    $ vi 文件名
    

    进入VIM编辑器,分为三种模式

    命令模式

    • i 切换到输入模式,以输入字符。
    • x 删除当前光标所在处的字符。
    • : 切换到底线命令模式,以在最底一行输入命令。
      若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

    输入模式

    • 字符按键以及Shift组合,输入字符
    • ENTER,回车键,换行
    • BACK SPACE,退格键,删除光标前一个字符
    • DEL,删除键,删除光标后一个字符
    • 方向键,在文本中移动光标
    • HOME/END,移动光标到行首/行尾
    • Page Up/Page Down,上/下翻页
    • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
    • ESC,退出输入模式,切换到命令模式

    底线命令模式

    • :w 保存文件但不退出vi
    • :w file 将修改另外保存到file中,不退出vi
    • :w! 强制保存,不推出vi
    • :wq 保存文件并退出vi
    • :wq! 强制保存文件,并退出vi
    • q: 不保存文件,退出vi
    • :q! 不保存文件,强制退出vi
    • :e! 放弃所有修改,从上次保存文件开始再编辑

    常见问题

    如何修改github上仓库的项目的语言类型

    • 问题:在把项目上传到github仓库上时语言会显示错误语言
    • 原理:github 是采用 Linguist来自动识别你的代码判断归为哪一类
    • 方案:在仓库的根目录下添加.gitattributes文件:并写入
    *.js linguist-language=python
    *.css linguist-language=python
    *.html linguist-language=python
    

    意思是将.js、css、html当作python来统计

  • 相关阅读:
    一起谈.NET技术,ASP.NET MVC3 Service Location 狼人:
    一起谈.NET技术,大型高性能ASP.NET系统架构设计 狼人:
    一起谈.NET技术,.NET 4 并行(多核)编程系列之二 从Task开始 狼人:
    一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单 狼人:
    一起谈.NET技术,打包Asp.Net 网站成为一个exe方便快捷的进行客户演示 狼人:
    一起谈.NET技术,ASP.NET Eval如何进行数据绑定 狼人:
    一起谈.NET技术,ASP.NET MVC开发人员必备的五大工具 狼人:
    一起谈.NET技术,写出优雅简明代码的论题集 Csharp(C#)篇[2] 狼人:
    mysql数据库解除外键
    JSF页面组件化
  • 原文地址:https://www.cnblogs.com/welan/p/9470271.html
Copyright © 2020-2023  润新知