Kedar Vijay Kulkarni 发布的文章

学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。

你知道如何使用 git 了,你有一个 GitHub 仓库并且可以向它推送。这一切都很好。但是你如何为他人的 GitHub 项目做出贡献? 这是我在学习 git 和 GitHub 之后想知道的。在本文中,我将解释如何 复刻 fork 一个 git 仓库、进行更改并提交一个 拉取请求 pull request

当你想要在一个 GitHub 项目上工作时,第一步是复刻一个仓库。

 title=

你可以使用我的演示仓库试一试。

当你在这个页面时,单击右上角的 “Fork”(复刻)按钮。这将在你的 GitHub 用户账户下创建我的演示仓库的一个新副本,其 URL 如下:

https://github.com/<你的用户名>/demo

这个副本包含了原始仓库中的所有代码、分支和提交。

接下来,打开你计算机上的终端并运行命令来 克隆 clone 仓库:

git clone https://github.com/<你的用户名>/demo

一旦仓库被克隆后,你需要做两件事:

1、通过发出命令创建一个新分支 new_branch

git checkout -b new_branch

2、使用以下命令为上游仓库创建一个新的 远程 remote

git remote add upstream https://github.com/kedark3/demo

在这种情况下,“上游仓库”指的是你创建复刻来自的原始仓库。

现在你可以更改代码了。以下代码创建一个新分支,进行任意更改,并将其推送到 new_branch 分支:

$ git checkout -b new_branch
Switched to a new branch ‘new_branch’
$ echo “some test file” &gt; test
$ cat test
Some test file
$ git status
On branch new_branch
No commits yet
Untracked files:
  (use "git add &lt;file&gt;..." to include in what will be committed)
    test
nothing added to commit but untracked files present (use "git add" to track)
$ git add test
$ git commit -S -m "Adding a test file to new_branch"
[new_branch (root-commit) 4265ec8] Adding a test file to new_branch
 1 file changed, 1 insertion(+)
 create mode 100644 test
$ git push -u origin new_branch
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 918 bytes | 918.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
Remote: Create a pull request for ‘new_branch’ on GitHub by visiting:
Remote:   <http://github.com/example/Demo/pull/new/new\_branch>
Remote:
 * [new branch]         new_branch -&gt; new_branch

一旦你将更改推送到您的仓库后, “Compare & pull request”(比较和拉取请求)按钮将出现在GitHub。

 title=

单击它,你将进入此屏幕:

 title=

单击 “Create pull request”(创建拉取请求)按钮打开一个拉取请求。这将允许仓库的维护者们审查你的贡献。然后,如果你的贡献是没问题的,他们可以合并它,或者他们可能会要求你做一些改变。

精简版

总之,如果您想为一个项目做出贡献,最简单的方法是:

  1. 找到您想要贡献的项目
  2. 复刻它
  3. 将其克隆到你的本地系统
  4. 建立一个新的分支
  5. 进行你的更改
  6. 将其推送回你的仓库
  7. 单击 “Compare & pull request”(比较和拉取请求)按钮
  8. 单击 “Create pull request”(创建拉取请求)以打开一个新的拉取请求

如果审阅者要求更改,请重复步骤 5 和 6,为你的拉取请求添加更多提交。

快乐编码!


via: https://opensource.com/article/19/7/create-pull-request-github

作者:Kedar Vijay Kulkarni 选题:lujun9972 译者:furrybear 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习在你的系统中创建一个文件系统,并且长期或者非长期地挂载它。

 title=

在计算技术中,文件系统控制如何存储和检索数据,并且帮助组织存储媒介中的文件。如果没有文件系统,信息将被存储为一个大数据块,而且你无法知道一条信息在哪结束,下一条信息在哪开始。文件系统通过为存储数据的文件提供名称,并且在文件系统中的磁盘上维护文件和目录表以及它们的开始和结束位置、总的大小等来帮助管理所有的这些信息。

在 Linux 中,当你创建一个硬盘分区或者逻辑卷之后,接下来通常是通过格式化这个分区或逻辑卷来创建文件系统。这个操作方法假设你已经知道如何创建分区或逻辑卷,并且你希望将它格式化为包含有文件系统,并且挂载它。

创建文件系统

假设你为你的系统添加了一块新的硬盘并且在它上面创建了一个叫 /dev/sda1 的分区。

1、为了验证 Linux 内核已经发现这个分区,你可以 cat/proc/partitions 的内容,就像这样:

[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

 253            0   10485760 vda
 253            1       8192000 vda1
  11            0       1048575 sr0
  11            1       374 sr1
   8            0   10485760 sda
   8            1   10484736 sda1
 252            0       3145728 dm-0
 252            1       2097152 dm-1
 252            2       1048576 dm-2
   8    16      1048576 sdb

2、决定你想要去创建的文件系统种类,比如 ext4、XFS,或者其他的一些。这里是一些可选项:

[root@localhost ~]# mkfs.<tab><tab>
mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs

3、为了这次练习的目的,选择 ext4。(我喜欢 ext4,因为如果你需要的话,它可以允许你去压缩文件系统,这对于 XFS 并不简单。)这里是完成它的方法(输出可能会因设备名称或者大小而不同):

[root@localhost ~]# mkfs.ext4 /dev/sda1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=8191 blocks
194688 inodes, 778241 blocks
38912 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=799014912
24 block groups
32768 blocks per group, 32768 fragments per group
8112 inodes per group
Superblock backups stored on blocks:
     32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

4、在上一步中,如果你想去创建不同的文件系统,请使用不同变种的 mkfs 命令。

挂载文件系统

当你创建好文件系统后,你可以在你的操作系统中挂载它。

1、首先,识别出新文件系统的 UUID 编码。使用 blkid 命令列出所有可识别的块存储设备并且在输出信息中查找 sda1

[root@localhost ~]# blkid
/dev/vda1: UUID="716e713d-4e91-4186-81fd-c6cfa1b0974d" TYPE="xfs"
/dev/sr1: UUID="2019-03-08-16-17-02-00" LABEL="config-2" TYPE="iso9660"
/dev/sda1: UUID="wow9N8-dX2d-ETN4-zK09-Gr1k-qCVF-eCerbF" TYPE="LVM2_member"
/dev/mapper/test-test1: PTTYPE="dos"
/dev/sda1: UUID="ac96b366-0cdd-4e4c-9493-bb93531be644" TYPE="ext4"
[root@localhost ~]#

2、运行下面的命令挂载 /dev/sd1 设备:

[root@localhost ~]# mkdir /mnt/mount_point_for_dev_sda1
[root@localhost ~]# ls /mnt/
mount_point_for_dev_sda1
[root@localhost ~]# mount -t ext4 /dev/sda1 /mnt/mount_point_for_dev_sda1/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 7.9G 920M 7.0G 12% /
devtmpfs 443M 0 443M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 30M 434M 7% /run
tmpfs 463M 0 463M 0% /sys/fs/cgroup
tmpfs 93M 0 93M 0% /run/user/0
/dev/sda1 2.9G 9.0M 2.7G 1% /mnt/mount_point_for_dev_sda1
[root@localhost ~]#

命令 df -h 显示了每个文件系统被挂载的挂载点。查找 /dev/sd1。上面的挂载命令使用的设备名称是 /dev/sda1。用 blkid 命令中的 UUID 编码替换它。注意,在 /mnt 下一个被新创建的目录挂载了 /dev/sda1

3、直接在命令行下使用挂载命令(就像上一步一样)会有一个问题,那就是挂载不会在设备重启后存在。为使永久性地挂载文件系统,编辑 /etc/fstab 文件去包含你的挂载信息:

UUID=ac96b366-0cdd-4e4c-9493-bb93531be644 /mnt/mount_point_for_dev_sda1/ ext4 defaults 0 0

4、编辑完 /etc/fstab 文件后,你可以 umount /mnt/mount_point_for_fev_sda1 并且运行 mount -a 命令去挂载被列在 /etc/fstab 文件中的所有设备文件。如果一切顺利的话,你可以使用 df -h 列出并且查看你挂载的文件系统:

root@localhost ~]# umount /mnt/mount_point_for_dev_sda1/
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 7.9G 920M 7.0G 12% /
devtmpfs 443M 0 443M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 30M 434M 7% /run
tmpfs 463M 0 463M 0% /sys/fs/cgroup
tmpfs 93M 0 93M 0% /run/user/0
/dev/sda1 2.9G 9.0M 2.7G 1% /mnt/mount_point_for_dev_sda1

5、你也可以检测文件系统是否被挂载:

[root@localhost ~]# mount | grep ^/dev/sd
/dev/sda1 on /mnt/mount_point_for_dev_sda1 type ext4 (rw,relatime,seclabel,stripe=8191,data=ordered)

现在你已经知道如何去创建文件系统并且长期或者非长期的挂载在你的系统中。


via: https://opensource.com/article/19/4/create-filesystem-linux-partition

作者:Kedar Vijay Kulkarni (Red Hat) 选题:lujun9972 译者:liujing97 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Remmina 的极简用户界面使得远程访问 Linux / Windows 10 变得轻松。

根据维基百科,远程桌面 是一种“软件或者操作系统特性,它可以让个人电脑上的桌面环境在一个系统(通常是电脑,但是也可以是服务器)上远程运行,但在另一个分开的客户端设备显示”。

换句话说,远程桌面是用来访问在另一台电脑上运行的环境的。比如说 ManageIQ/Integration tests 仓库的拉取请求 (PR) 测试系统开放了一个虚拟网络计算 (VNC) 连接端口,使得我能够远程浏览正被实时测试的拉取请求。远程桌面也被用于帮助客户解决电脑问题:在客户的许可下,你可以远程建立 VNC 或者远程桌面协议(RDP)连接来查看或者交互式地访问该电脑以寻找并解决问题。

运用远程桌面连接软件可以建立这些连接。可供选择的软件有很多,我用 Remmina,因为我喜欢它极简、好用的用户界面 (UI)。它是用 GTK+ 编写的,在 GNU GPL 许可证开源。

在这篇文章里,我会解释如何使用 Remmina 客户端从一台 Linux 电脑上远程连接到 Windows 10 系统 和 Red Hat 企业版 Linux 7 系统。

在 Linux 上安装 Remmina

首先,你需要在你用来远程访问其它电脑的的主机上安装 Remmina。如果你用的是 Fedora,你可以运行如下的命令来安装 Remmina:

sudo dnf install -y remmina

如果你想在一个不同的 Linux 平台上安装 Remmina,跟着 安装教程 走。然后你会发现 Remmina 正和你其它软件出现在一起(在这张图片里选中了 Remmina)。

点击图标运行 Remmina,你应该能看到像这样的屏幕:

Remmina 提供不同种类的连接,其中包括用来连接到 Windows 系统的 RDP 和用来连接到 Linux 系统的 VNC。如你在上图左上角所见的,Remmina 的默认设置是 RDP。

连接到 Windows 10

在你通过 RDP 连接到一台 Windows 10 电脑之前,你必须修改权限以允许分享远程桌面并通过防火墙建立连接。

要许可远程桌面分享,在“文件管理器”界面右击“我的电脑 → 属性 → 远程设置”,接着在跳出的窗口中,勾选“在这台电脑上允许远程连接”,再点击“应用”。

然后,允许远程连接通过你的防火墙。首先在“开始菜单”中查找“防火墙设置”,选择“允许应用通过防火墙”。

在打开的窗口中,在“允许的应用和特性”下找到“远程桌面”。根据你用来访问这个桌面的网络酌情勾选“隐私”和/或“公开”列的选框。点击“确定”。

回到你用来远程访问 Windows 主机的 Linux 电脑,打开 Remmina。输入你的 Windows 主机的 IP 地址,敲击回车键。(我怎么在 LinuxWindws 中确定我的 IP 地址?)看到提示后,输入你的用户名和密码,点击“确定”。

如果你被询问是否接受证书,点击“确定”。

你此时应能看到你的 Windows 10 主机桌面。

连接到 Red Hat 企业版 Linux 7

要在你的 RHEL7 电脑上允许远程访问,在 Linux 桌面上打开“所有设置”。

点击分享图标会打开如下的窗口:

如果“屏幕分享”处于关闭状态,点击一下。一个窗口会弹出,你可以滑动到“打开”的位置。如果你想允许远程控制桌面,将“允许远程控制”调到“打开”。你同样也可以在两种访问选项间选择:一个能够让电脑的主要用户接受或者否绝连接要求,另一个能用密码验证连接。在窗口底部,选择被允许连接的网络界面,最后关闭窗口。

接着,从“应用菜单 → 其它 → 防火墙”打开“防火墙设置”。

勾选 “vnc-server”旁边的选框(如下图所示)关闭窗口。接着直接到你远程电脑上的 Remmina,输入你想连接到的 Linux 桌面的 IP 地址,选择 VNC 作为协议,点击回车键。

如果你之前选择的验证选项是“新连接必须询问访问许可”,RHEL 系统用户会看到这样的一个弹窗:

点击“接受”以成功进行远程连接。

如果你选择用密码验证连接,Remmina 会向你询问密码。

输入密码然后“确认”,你应该能连接到远程电脑。

使用 Remmina

Remmina 提供如上图所示的标签化的 UI,就好像一个浏览器一样。在上图所示的左上角你可以看到两个标签:一个是之前建立的 WIndows 10 连接,另一个新的是 RHEL 连接。

在窗口的左侧,有一个有着“缩放窗口”、“全屏模式”、“偏好”、“截屏”、“断开连接”等选项的工具栏。你可以自己探索看那种适合你。

你也可以通过点击左上角的“+”号创建保存过的连接。根据你的连接情况填好表单点击“保存”。以下是一个 Windows 10 RDP 连接的示例:

下次你打开 Remmina 时连接就在那了。

点击一下它,你不用补充细节就可以建立连接了。

补充说明

当你使用远程桌面软件时,你所有的操作都在远程桌面上消耗资源 —— Remmina(或者其它类似软件)仅仅是一种与远程桌面交互的方式。你也可以通过 SSH 远程访问一台电脑,但那将会让你在那台电脑上局限于仅能使用文字的终端。

你也应当注意到当你允许你的电脑远程连接时,如果一名攻击者用这种方法获得你电脑的访问权同样会给你带来严重损失。因此当你不频繁使用远程桌面时,禁止远程桌面连接以及其在防火墙中相关的服务是很明智的做法。


via: https://opensource.com/article/18/6/linux-remote-desktop

作者:Kedar Vijay Kulkarni 选题:lujun9972 译者:tomjlw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在这个 Git 入门系列的第三篇中,我们来学习一下如何添加和删除 Git 分支。

在本系列的前两篇文章中,我们开始使用 Git,学会如何克隆项目,修改、增加和删除内容。在这第三篇文章中,我将介绍 Git 分支,为何以及如何使用分支。

 title=

不妨用树来描绘 Git 仓库。图中的树有很多分支,或长或短,或从树干延伸或从其它分支延伸。在这里,我们用树干比作仓库的 master 分支,其中 master 代指 ”master 分支”,是 Git 仓库的中心分支或第一个分支。为简单起见,我们假设 master 是树干,其它分支都是从该分支分出的。

为何在 Git 仓库中使用分支

使用分支的主要理由为:

  • 如果你希望为项目增加新特性,但很可能会影响当前可正常工作的代码。对于该项目的活跃用户而言,这是很糟糕的事情。与其将特性加入到其它人正在使用的 master 分支,更好的方法是在仓库的其它分支中变更代码,下面会给出具体的工作方式。
  • 更重要的是,Git 其设计用于协作。如果所有人都在你代码仓库的 master 分支上操作,会引发很多混乱。对编程语言或项目的知识和阅历因人而异;有些人可能会编写有错误或缺陷的代码,也可能会编写你觉得不适合该项目的代码。使用分支可以让你核验他人的贡献并选择适合的加入到项目中。(这里假设你是代码库唯一的所有者,希望对增加到项目中的代码有完全的控制。在真实的项目中,代码库有多个具有合并代码权限的所有者)

创建分支

让我们回顾本系列上一篇文章,看一下在我们的 Demo 目录中分支是怎样的。如果你没有完成上述操作,请按照文章中的指示从 GitHub 克隆代码并进入 Demo 目录。运行如下命令:

pwd
git branch
ls -la

pwd 命令(是当前工作目录的英文缩写)返回当前你所处的目录(以便确认你在 Demo 目录中),git branch 列出该项目在你主机上的全部分支,ls -la 列出当前目录下的所有文件。你的终端输出类似于:

 title=

master 分支中,只有一个文件 README.md。(Git 会友好地忽略掉其它目录和文件。)

接下来,运行如下命令:

git status
git checkout -b myBranch
git status

第一条命令 git status 告知你当前位于 branch master,(就像在终端中看到的那样)它与 origin/master 处于同步状态,这意味着 master 分支的本地副本中的全部文件也出现在 GitHub 中。两份副本没有差异,所有的提交也是一致的。

下一条命令 git checkout -b myBranch 中的 -b 告知 Git 创建一个名为 myBranch 的新分支,然后 checkout 命令将我们切换到新创建的分支。运行第三条命令 git status 确保你已经位于刚创建的分支下。

如你所见,git status 告知你当前处于 myBranch 分支,没有变更需要提交。这是因为我们既没有增加新文件,也没有修改已有文件。

 title=

如果希望以可视化的方式查看分支,可以运行 gitk 命令。如果遇到报错 bash: gitk: command not found...,请先安装 gitk 软件包(找到你操作系统对应的安装文档,以获得安装方式)。

(LCTT 译注:需要在有 X 服务器的终端运行 gitk,否则会报错)

下图展示了我们在 Demo 项目中的所作所为:你最后一次提交(的对应信息)是 Delete file.txt,在此之前有三次提交。当前的提交用黄点标注,之前的提交用蓝点标注,黄点和 Delete file.txt 之间的三个方块展示每个分支所在的位置(或者说每个分支中的最后一次提交的位置)。由于 myBranch 刚创建,提交状态与 master 分支及其对应的记为 remotes/origin/master 的远程 master 分支保持一致。(非常感谢来自 Red Hat 的 Peter Savage 让我知道 gitk 这个工具)

 title=

下面让我们在 myBranch 分支下创建一个新文件并观察终端输出。运行如下命令:

echo "Creating a newFile on myBranch" > newFile
cat newFile
git status

第一条命令中的 echo 创建了名为 newFile 的文件,接着 cat newFile 打印出文件内容,最后 git status 告知你我们 myBranch 分支的当前状态。在下面的终端输出中,Git 告知 myBranch 分支下有一个名为 newFile 的文件当前处于 untracked 状态。这表明我们没有让 Git 追踪发生在文件 newFile 上的变更。

 title=

下一步是增加文件,提交变更并将 newFile 文件推送至 myBranch 分支(请回顾本系列上一篇文章获得更多细节)。

git add newFile
git commit -m "Adding newFile to myBranch"
git push origin myBranch

在上述命令中,push 命令使用的分支参数为 myBranch 而不是 master。Git 添加 newFile 并将变更推送到你 GitHub 账号下的 Demo 仓库中,告知你在 GitHub 上创建了一个与你本地副本分支 myBranch 一样的新分支。终端输出截图给出了运行命令的细节及命令输出。

 title=

当你访问 GitHub 时,在分支选择的下拉列表中可以发现两个可供选择的分支。

 title=

点击 myBranch 切换到 myBranch 分支,你可以看到在此分支上新增的文件。

 title=

截至目前,我们有两个分支:一个是 master 分支,只有一个 README.md 文件;另一个是 myBranch 分支,有两个文件。

你已经知道如何创建分支了,下面我们再创建一个分支。输入如下命令:

git checkout master
git checkout -b myBranch2
touch newFile2
git add newFile2
git commit -m "Adding newFile2 to myBranch2"
git push origin myBranch2

我不再给出终端输出,需要你自己尝试,但你可以在 GitHub 代码库 中验证你的结果。

删除分支

由于我们增加了两个分支,下面删除其中的一个(myBranch),包括两步:

  1. 删除本地分支 你不能删除正在操作的分支,故切换到 master 分支 (或其它你希望保留的分支),命令及终端输出如下:

git branch 可以列出可用的分支,使用 checkout 切换到 master 分支,然后使用 git branch -D myBranch 删除该分支。再次运行 git branch 检查是否只剩下两个分支(而不是三个)。

  1. 删除 GitHub 上的分支 使用如下命令删除 myBranch 的远程分支:
git push origin :myBranch

 title=

上面 push 命令中分支名称前面的冒号(:)告知 GitHub 删除分支。另一种写法为:

git push -d origin myBranch

其中 -d (也可以用 --delete) 也用于告知 GitHub 删除你的分支。

我们学习了 Git 分支的使用,在本系列的下一篇文章中,我们将介绍如何执行 fetchrebase 操作,对于多人同时的贡献的项目而言,这是很必须学会的。


via: https://opensource.com/article/18/5/git-branching

作者:Kedar Vijay Kulkarni 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本系列的第一篇文章 开始使用 Git 时,我们创建了一个简单的 Git 仓库,并用我们的计算机连接到它,向其中添加一个文件。在本文中,我们将学习一些关于 Git 的其他内容,即如何克隆(下载)、修改、添加和删除 Git 仓库中的文件。

让我们来克隆一下

假设你在 GitHub 上已经有一个 Git 仓库,并且想从它那里获取你的文件——也许你在你的计算机上丢失了本地副本,或者你正在另一台计算机上工作,但是想访问仓库中的文件,你该怎么办?从 GitHub 下载你的文件?没错!在 Git 术语中我们称之为“ 克隆 clone ”。(你也可以将仓库作为 ZIP 文件下载,但我们将在本文中探讨克隆方式。)

让我们克隆在上一篇文章中创建的名为 Demo 的仓库。(如果你还没有创建 Demo 仓库,请跳回到那篇文章并在继续之前执行那些步骤)要克隆文件,只需打开浏览器并导航到 https://github.com/<your_username>/Demo (其中 <your_username> 是你仓库的名称。例如,我的仓库是 https://github.com/kedark3/Demo)。一旦你导航到该 URL,点击“ 克隆或下载 Clone or download ”按钮,你的浏览器看起来应该是这样的:

正如你在上面看到的,“ 使用 HTTPS 克隆 Clone with HTTPS ”选项已打开。从该下拉框中复制你的仓库地址(https://github.com/<your_username>/Demo.git),打开终端并输入以下命令将 GitHub 仓库克隆到你的计算机:

git clone https://github.com/<your_username>/Demo.git

然后,要查看 Demo 目录中的文件列表,请输入以下命令:

ls Demo/

终端看起来应该是这样的:

修改文件

现在我们已经克隆了仓库,让我们修改文件并在 GitHub 上更新它们。首先,逐个输入下面的命令,将目录更改为 Demo/,检查 README.md 中的内容,添加新的(附加的)内容到 README.md,然后使用 git status 检查状态:

cd Demo/
ls
cat README.md
echo "Added another line to REAMD.md" >> README.md
cat README.md
git status

如果你逐一运行这些命令,终端看起开将会是这样:

让我们看一下 git status 的输出,并了解它的意思。不要担心这样的语句:

On branch master
Your branch is up-to-date with 'origin/master'.".

因为我们还没有学习这些。(LCTT 译注:学了你就知道了)下一行说:Changes not staged for commit(变化未筹划提交);这是告诉你,它下面列出的文件没有被标记准备(“ 筹划 stage ”)提交。如果你运行 git add,Git 会把这些文件标记为 Ready for commit(准备提交);换句话说就是 Changes staged for commit(变化筹划提交)。在我们这样做之前,让我们用 git diff 命令来检查我们添加了什么到 Git 中,然后运行 git add

这里是终端输出:

我们来分析一下:

  • diff --git a/README.md b/README.md 是 Git 比较的内容(在这个例子中是 README.md)。
  • --- a/README.md 会显示从文件中删除的任何东西。
  • +++ b/README.md 会显示从文件中添加的任何东西。
  • 任何添加到文件中的内容都以绿色文本打印,并在该行的开头加上 + 号。
  • 如果我们删除了任何内容,它将以红色文本打印,并在该行的开头加上 - 号。
  • 现在 git status 显示 Changes to be committed:(变化将被提交),并列出文件名(即 README.md)以及该文件发生了什么(即它已经被 modified 并准备提交)。

提示:如果你已经运行了 git add,现在你想看看文件有什么不同,通常 git diff 不会输出任何东西,因为你已经添加了文件。相反,你必须使用 git diff --cached。它会告诉你 Git 添加的当前版本和以前版本文件之间的差别。你的终端输出看起来会是这样:

上传文件到你的仓库

我们用一些新内容修改了 README.md 文件,现在是时候将它上传到 GitHub。

让我们提交更改并将其推送到 GitHub。运行:

git commit -m "Updated Readme file"

这告诉 Git 你正在“提交”已经“添加”的更改,你可能还记得,从本系列的第一部分中,添加一条消息来解释你在提交中所做的操作是非常重要的,以便你在稍后回顾 Git 日志时了解当时的目的。(我们将在下一篇文章中更多地关注这个话题。)Updated Readme file 是这个提交的消息——如果你认为这没有合理解释你所做的事情,那么请根据需要写下你的提交消息。

运行 git push -u origin master,这会提示你输入用户名和密码,然后将文件上传到你的 GitHub 仓库。刷新你的 GitHub 页面,你应该会看到刚刚对 README.md 所做的更改。

终端的右下角显示我提交了更改,检查了 Git 状态,并将更改推送到了 GitHub。git status 显示:

Your branch is ahead of 'origin/master' by 1 commit
  (use "git push" to publish your local commits)

第一行表示在本地仓库中有一个提交,但不在 origin/master 中(即在 GitHub 上)。下一行指示我们将这些更改推送到 origin/master 中,这就是我们所做的。(在本例中,请参阅本系列的第一篇文章,以唤醒你对 origin 含义的记忆。我将在下一篇文章中讨论分支的时候,解释 master 的含义。)

添加新文件到 Git

现在我们修改了一个文件并在 GitHub 上更新了它,让我们创建一个新文件,将它添加到 Git,然后将其上传到 GitHub。 运行:

echo "This is a new file" >> file.txt

这将会创建一个名为 file.txt 的新文件。

如果使用 cat 查看它:

cat file.txt

你将看到文件的内容。现在继续运行:

git status

Git 报告说你的仓库中有一个未跟踪的文件(名为 file.txt)。这是 Git 告诉你说在你的计算机中的仓库目录下有一个新文件,然而你并没有告诉 Git,Git 也没有跟踪你所做的任何修改。

我们需要告诉 Git 跟踪这个文件,以便我们可以提交并上传文件到我们的仓库。以下是执行该操作的命令:

git add file.txt
git status

终端输出如下:

git status 告诉你有 file.txt 被修改,对于 Git 来说它是一个 new file,Git 在此之前并不知道。现在我们已经为 Git 添加了 file.txt,我们可以提交更改并将其推送到 origin/master

Git 现在已经将这个新文件上传到 GitHub;如果刷新 GitHub 页面,则应该在 GitHub 上的仓库中看到新文件 file.txt

通过这些步骤,你可以创建尽可能多的文件,将它们添加到 Git 中,然后提交并将它们推送到 GitHub。

从 Git 中删除文件

如果我们发现我们犯了一个错误,并且需要从我们的仓库中删除 file.txt,该怎么办?一种方法是使用以下命令从本地副本中删除文件:

rm file.txt

如果你现在做 git status,Git 就会说有一个文件 not staged for commit(未筹划提交),并且它已经从仓库的本地拷贝中删除了。如果我们现在运行:

git add file.txt
git status

我知道我们正在删除这个文件,但是我们仍然运行 git add,因为我们需要告诉 Git 我们正在做的更改git add 可以用于我们添加新文件、修改一个已存在文件的内容、或者从仓库中删除文件时。实际上,git add 将所有更改考虑在内,并将这些筹划提交这些更改。如果有疑问,请仔细查看下面终端屏幕截图中每个命令的输出。

Git 会告诉我们已删除的文件正在进行提交。只要你提交此更改并将其推送到 GitHub,该文件也将从 GitHub 的仓库中删除。运行以下命令:

git commit -m "Delete file.txt"
git push -u origin master

现在你的终端看起来像这样:

你的 GitHub 看起来像这样:

现在你知道如何从你的仓库克隆、添加、修改和删除 Git 文件。本系列的下一篇文章将检查 Git 分支。


via: https://opensource.com/article/18/2/how-clone-modify-add-delete-git-files

作者:Kedar Vijay Kulkarni 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果您从未使用过 Git,甚至可能从未听说过它。莫慌张,只需要一步步地跟着这篇入门教程,很快您就会在 GitHub 上拥有一个全新的 Git 仓库。

在开始之前,让我们先理清一个常见的误解:Git 并不是 GitHub。Git 是一套版本控制系统(或者说是一款软件),能够协助您跟踪计算机程序和文件在任何时间的更改。它同样允许您在程序、代码和文件操作上与同事协作。GitHub 以及类似服务(包括 GitLab 和 BitBucket)都属于部署了 Git 程序的网站,能够托管您的代码。

步骤 1:申请一个 GitHub 账户

GitHub.com 网站上(免费)创建一个账户是最简单的方式。

选择一个用户名(比如说,octocat123),输入您的邮箱地址和密码,然后点击 Sign up for GitHub。进入之后,您将看到下方插图的界面:

步骤 2:创建一个新的仓库

一个仓库( repository),类似于能储存物品的场所或是容器;在这里,我们创建仓库存储代码。在 + 符号(在插图的右上角,我已经选中它了) 的下拉菜单中选择 New Repository

给您的仓库命名(比如说,Demo)然后点击 Create Repository。无需考虑本页面的其他选项。

恭喜!您已经在 GitHub.com 中建立了您的第一个仓库。

步骤 3: 创建文件

当仓库创建完毕后,界面将和下方一致:

不必惊慌,它比看上去简单。跟紧步骤。忽略其他内容,注意截图上的 “...or create a new repository on the command line,”。

在您的计算机中打开终端。

键入 git 然后回车。如果命令行显示 bash: git: command not found,在您的操作系统或发行版 安装 Git 命令。键入 git 并回车检查是否成功安装;如果安装成功,您将看见大量关于使用该命令的说明信息。

在终端内输入:

mkdir Demo

这个命令将会创建一个名为 Demo 的目录(文件夹)。

如下命令将会切换终端目录,跳转到 Demo 目录:

cd Demo

然后输入:

echo "#Demo" >> README.md

创建一个名为 README.md 的文件,并写入 #Demo。检查文件是否创建成功,请输入:

cat README.md

这将会为您显示 README.md 文件的内容,如果文件创建成功,您的终端会有如下显示:

使用 Git 程序告诉您的电脑,Demo 是一个被 Git 管理的目录,请输入:

git init

然后,告诉 Git 程序您关心的文件并且想在此刻起跟踪它的任何改变,请输入:

git add README.md

步骤 4:创建一次提交

目前为止,您已经创建了一个文件,并且已经通知了 Git,现在,是时候创建一次 提交 commit 了。提交可以看作是一个里程碑。每当完成一些工作之时,您都可以创建一次提交,保存文件当前版本,这样一来,您可以返回之前的版本,并且查看那时候的文件内容。无论何时您修改了文件,都可以对文件创建一个上一次的不一样的新版本。

创建一次提交,请输入:

git commit -m "first commit"

就是这样!刚才您创建了包含一条注释为 “first commit” 的 Git 提交。每次提交,您都必须编辑注释信息;它不仅能协助您识别提交,而且能让您理解此时您对文件做了什么修改。这样到了明天,如果您在文件中添加新的代码,您可以写一句提交信息:“添加了新的代码”,然后当您一个月后回来查看提交记录或者 Git 日志(即提交列表),您还能知道当时的您在文件夹里做了什么。

步骤 5: 将您的计算机与 GitHub 仓库相连接

现在,是时候用如下命令将您的计算机连接到 GitHub 仓库了:

git remote add origin https://github.com/<your_username>/Demo.git

让我们一步步的分析这行命令。我们通知 Git 去添加一个叫做 origin (起源)的,拥有地址为 https://github.com/<your_username>/Demo.git(它也是您的仓库的 GitHub 地址) 的 remote (远程仓库)。当您提交代码时,这允许您在 GitHub.com 和 Git 仓库交互时使用 origin 这个名称而不是完整的 Git 地址。为什么叫做 origin?当然,您可以叫点别的,只要您喜欢(惯例而已)。

现在,我们已经将本地 Demo 仓库副本连接到了其在 GitHub.com 远程副本上。您的终端看起来如下:

此刻我们已经连接到远程仓库,可以推送我们的代码 到 GitHub.com(例如上传 README.md 文件)。

执行完毕后,您的终端会显示如下信息:

然后,如果您访问 https://github.com/<your_username>/Demo,您会看到截图内显示的情况:

就是这么回事!您已经创建了您的第一个 GitHub 仓库,连接到了您的电脑,并且从你的计算机推送(或者称:上传)一个文件到 GitHub.com 名叫 Demo 的远程仓库上了。下一次,我将编写关于 Git 复制(从 GitHub 上下载文件到你的计算机上)、添加新文件、修改现存文件、推送(上传)文件到 GitHub。


via: https://opensource.com/article/18/1/step-step-guide-git

作者:Kedar Vijay Kulkarni 译者:CYLeft 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出