github学习笔记

by admin on 2020年3月17日

据外媒 BleepingComputer
报道,Git
项目组于前两天公布了一个在 Git 命令行客户端、Git Desktop 和 Atom
中发现的任意代码执行漏洞,这是一个比较严重的安全漏洞,可能会使得恶意仓库在易受攻击的计算机上远程执行命令。

git
的工作就是创建和保存你的项目的快照及与之后的快照进行比较。本文将对有关创建与提交项目的快照的命令作介绍。

澳门新葡亰平台官网 1

这个漏洞已被分配 CVE-2018-17456 这个唯一 ID,与之前的 CVE-2017-1000117
可选注入漏洞相似 —— 恶意仓库可以新建一个 .gitmodules
文件,其中包含以破折号开头的 URL

获取与创建项目的命令

理解仓库(或者说是数据库)和文件关系

通过破折号,当 Git 使用 –recurse-submodules
参数来克隆仓库时,该命令会将 URL
翻译为一个选项,然后可以使用该选项在计算机上进行远程代码执行。

git init 

澳门新葡亰平台官网 2

当运行 “git clone –recurse-submodules” 时,Git 会解析 .gitmodules
文件中的 URL 字段,然后将其作为参数传递给 “git clone” 子进程。如果 URL
字段是一个字符串,并使用短划线开头,这个 “git clone” 子进程将会把 URL
翻译为一个选项。这可能导致用户运行 “git clone” 时,会执行 superproject
中的任意脚本。

用 git init在目录中创建新的Git
仓库。你可以在任何时候,任何目录中这么做,完全是本地化的。

理解远程数据库和本地数据库,以及推和拉关系

下面通过一个例子澳门新葡亰平台官网,进行说明,下面的漏洞使用了恶意的 .gitmodules
文件(注意 URL 如何以破折号开头),以使得 Git 认为这是一个选项。然后
“touch VULNERABLE/git@github.com:/timwr/test.git” 这条命令将会被执行。

在目录中执行git
init,就可以创建一个Git仓库了。比如我们创建test项目:

澳门新葡亰平台官网 3

[submodule "test"]
    path = test
    url = ssh://-oProxyCommand=touch VULNERABLE/git@github.com:/timwr/test.git

$ mkdir test

本地数据库的创建

此漏洞已在 Git v2.19.1 (with backports in v2.14.5, v2.15.3, v2.16.5,
v2.17.2, and v2.18.1), GitHub Desktop 1.4.2, Github Desktop
1.4.3-beta0, Atom 1.31.2 和 Atom 1.32.0-beta3 中得到修复。

$ cd test

澳门新葡亰平台官网 4

Git 项目组强烈建议所有用户升级到最新版本的 Git
client, Github
Desktop 或 Atom,以免遭受恶意仓库的攻击。

git init

注解修改的规范

(文/开源中国)    

澳门新葡亰平台官网 5

澳门新葡亰平台官网 6

 

要提交到数据库,先提交至索引

现在你可以看到在你的项目目录中有个.git的子目录。这就是你的Git仓库了,所有有关你的项目的快照数据都存在这里。

安装Git之后,请输入您的用户名和电子邮件地址。该设置操作在安装Git后进行一次就够了。这些信息将作为提交者信息显示在更新历史中。

 

澳门新葡亰平台官网 7

git clone 

git config –global

使用git clone 拷贝一个git
仓库到本地,让自己能够查看该项目,或者进行修改。

澳门新葡亰平台官网 8

如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以克隆那个项目。执行命令:

用git init命令,把任意位置的目录纳入数据库中

git clone [url]

澳门新葡亰平台官网 9

[url]为你想要复制的项目,就可以了。

将目录中的文件加入到索引里

例如我们克隆Github上的项目:

澳门新葡亰平台官网 10

澳门新葡亰平台官网 11

将目录下所有文件加入到索引

 

澳门新葡亰平台官网 12

例如我们要克隆Github上的项目:

add和status命令

$ git clone git://github.com/schacon/simplegit.git

澳门新葡亰平台官网 13

默认情况下,Git会按照你提供的URL所指示的项目的名称创建你的本地项目目录。通常就是该URL最后一个/之后的项目名称。如果你想要一个不一样的名字。你可以在该命令后加上你想要的名称。

commit命令,后面跟着string

基本快照

澳门新葡亰平台官网 14

git
的工作就是创建和保存你的项目的快照及与之后的快照进行对比。本章将对有关创建与提交的快照的命令介绍.

log命令查看提交记录

git add 

澳门新葡亰平台官网 15

git add 命令可将该文件添加到缓存。

推送,使得远程仓库和本地仓库保持修改的同步

git status 命令用于查看项目的当前状态。

澳门新葡亰平台官网 16

git diff 

拉取

执行git diff 来查看执行git status的结果的详细信息

  • github的核心是开源的版本控制系统VCS, git.
  • Linux原生自带了git.
  • 如果不想用命令行, 可以下载图形界面的客户端Github Desktop,
    但是还是用命令行能够知道本质上进行了什么操作.
    如果你不需要处理本地的文件,那么在浏览器上通过github网站就能处理包括

git diff 命令显示已写入缓存与修改但尚未写入缓存的区别。git diff
有两个主要的应用场景。

  1. 创建仓库
  2. 复刻仓库
  3. 管理文件
  4. 社交
    等一系列动作

尚未缓存的改动 git diff

创建仓库

项目住在仓库里面, 点+号即可创建, 然后跟着wizard走即可

查看已缓存的改动:git diff –cached

复刻仓库

一个fork就是仓库的一个副本,复刻一个仓库使得你可以在原项目上自由地实验,
而不影响原项目.
一般而言,复刻要么用于改造别人的项目,要么用别人的项目作为自己想法的起点.

查看已缓存的与未缓存的所有改动: git diff HEAD

为别人的项目做改变

比如帮别人改bug. 相较于提一个issue, 你可以

  1. 复刻项目
  2. 做修改
  3. 提交拉请求(pull request)
    如果项目的所有者欣赏你的工作, 他们可能会将你的修正拉入原来的仓库里.

显示摘要而非整个diff :git diff –stat

用别人的项目作为你自己想法的起点

开源的核心想法就是, 通过共享代码, 我们可以创造更好更可靠的软件.

git commit

保持你的复刻同步

假设现在你已经复刻了一个别人的仓库,
但你在你本地电脑里还没有仓库里的文件.

使用 git add 命令将想要的快照的内容写入了缓存,而执行git commoit
记录缓存区的快照。

在本地创建一个你复刻的克隆.

  1. 点Clone or download
  2. 复制克隆URL
  3. 打开终端
  4. git clone URL

https://help.github.com

Git
为你的每一个提交都记录你的名字与电子邮件地址,所以第一步需要配置用户名和邮箱地址。

$ git config –global user.name ‘test’

$ git config –global user.email test@163.com

接下来我们写入缓存,并提交对文件的改动。在首个例子中,我们使用-m
选项在命令行中提供提交的注释。

$git add 

$ git status -s 

$ git commit -m ‘test’

现在我们已经记录了快照 了。如果我们再执行git status:

查看上次提交是否有修改。

如果你没有设置-m选项 ,git
会尝试为你打开一个编辑器以填写提交信息。如果Git在你对它的配置中找不到相关信息,默认会打开vim,屏幕会像这样:

#Please enter the commit message for your changes. Lines starting #
will be igored,and an empty message aborts the commit.#On 

branch master #(user “git reset HEAD…” to unstage) 

如果你觉得git add 提交缓存的流程太繁琐,Git 也允许你使用-a
选项跳过这一步。命令格式如下:

git commit -a 

如:

$ git commit -am ‘modify config’

 

git reset HEAD 

git reset HEAD命令用于取消已缓存的内容。

git rm 

git rm 将文件从缓存区中移除

默认情况下,git rm file
会将文件从缓存区和你的硬盘(工作目录)删除。如果要在工作目录中留着该文件,可以使用命令:

git rm –cached

git mv 

git mv 命令做得所有的事情就是git rm –cached
,重命名磁盘上的文件,然后执行git add
把新文件添加到缓存区。因此,虽然有git mv命令,但它有点多余。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图