如何使用 Unix 命令行

我们会使用 Git 的命令行界面。Git 还有很多其他使用方式,比如 VS Code 插件、Magitlazygit,等等。但是通常情况下你只要会使用命令行 Git,就可以在很短的时间内学会 Git 的图形化或者文本化界面。

从现在开始我们输入的所有命令,你都不必完全照做,而且就算照做了也未必会得到完全一样的结果。你只要理解了并且自己动手试一试这个命令就好。

如果你会使用 Unix 命令行,可以直接跳到 Git 基础配置一节。

cd & mkdir

打开你的终端(macOS:打开 Terminal 应用;Windows:打开 Git Bash 应用)。你会在某个地方看到一个波浪线 ~,它代表你的用户目录(directory),对应 macOS 上的 /Users/你的用户名 和 Windows 上的 C:\Users\你的用户名。目录是 Unix 上文件夹的别名。

输入 cd /,回车,你会看到刚才的波浪线变成了斜杠 /。这代表你当前的目录切换到了根目录 /。现在再输入 cd ~,你就会回到用户目录下。cd 是「change directory」的缩写,可以让你切换当前的目录。通常情况下你每次打开终端都会处于用户目录 ~ 下。

输入 mkdir test,然后 cd test,你就会进入到 ~/test 目录里。mkdir 是「make directory」的缩写,它让你在 ~ 下新建了一个名叫 test 的目录。

ls & touch

~/test 里运行以下命令($ 后面的是你要输入的;没有 $ 的行是你应该看到的):

$ touch empty_file
$ ls
empty_file test2

touch 会创造出一个空文件,而 ls 会把目录里的所有文件和子目录都列出来。如果你想要看更详细的信息,运行:

$ ls -l
total 0
-rw-r--r-- 1 xxx xxx 0 ??? ?? ??:?? empty_file
drwxr-xr-x 1 xxx xxx 0 ??? ?? ??:?? test2

注意 test2 那行由 d 开头,说明它是一个目录。

你也可以通过 ls 查看别的目录:

$ touch test2/emtpy_file2
$ ls test2
empty_file2

隐藏文件

在 Unix 上,所有 . 开头的文件都是隐藏文件。运行:

$ touch .hidden_file
$ ls
empty_file test2
$ ls -la
total 0
drwxr-xr-x 1 xxx xxx ? ??? ?? ??:?? .
drwxr-xr-x 1 xxx xxx ? ??? ?? ??:?? ..
-rw-r--r-- 1 xxx xxx ? ??? ?? ??:?? empty_file
-rw-r--r-- 1 xxx xxx ? ??? ?? ??:?? .hidden_file
-rw-r--r-- 1 xxx xxx ? ??? ?? ??:?? test2

选项 -a 会把隐藏文件也列出来。目录 ... 分别是当前目录和上一级目录。试试 cd .cd ..

rm & rmdir

运行:

$ rm test2/empty_file2
$ ls test2

rm 是「remove」的缩写,用于删除文件。rm 删除的文件不会进入废纸篓或者回收站。

如果你想删除一个目录和其中的所有文件,运行 rm -r 目录名。所以不要尝试运行 rm -rf /

再运行:

$ rmdir test2
$ ls
empty_file

rmdir 是「remove directory」的缩写,用于删除空的目录。

mv & cp

mvcp 分别是「move」和「copy」的缩写。猜猜以下命令会干什么:

$ cp empty_file another_empty_file
$ mv empty_file ..
$ mv another_empty_file empty_file

cprm 一样,都可以用 -r 选项来选中目录和其中的所有文件。但是 mv 不需要,因为目录里的文件没有被重命名。

echo & cat

~/test 里运行:

$ echo hello
hello
$ echo hello > hello_file
$ ls
empty_file hello_file
$ cat hello_file
hello

echo 会把它的参数 hello 原封不动地输出。大于号 > 会把它左边的输出写入右边的文件里,因而我们创造了一个内容是 hello 的新文件 hello_file。最后,小猫 cat 会把文件的内容输出。

运行以下命令并试着理解一下:

$ ls > files
$ cat files > files_copy
$ cat files_copy
empty_file
files
hello_file

(注意 ls 在输入到文件时格式会略有不同,文件名之间会换行而非空格。)

连按几次方向上键,直到当前的命令变成 echo hello > hello_file,然后回车。这时,运行 cat hello_file 还会得到 hello,说明 > 会先把原来的内容清除,然后再写入。如果想要保留原来的内容,运行:

$ echo world >> hello_file
$ cat hello_file
hello
world

获得帮助

这个教程不会像 Pro Git 那样教你每个命令的所有常用用法,事实上你也不需要背下每个命令。你只要知道什么时候大概该用什么,然后再像这样获得帮助:

$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                             e.g., '--block-size=M'; see SIZE format below
                                     .
                                     .
                                     .

man, less & 管道

也许 --help 输出的东西太多了,you want less。输入 ls --help | less,然后用以下的快捷键浏览:

(如果你在用 macOS,ls 的帮助太短了,输入 man lsman 是「manual」的缩写。)

命令中的管道 | 会把前面的输出送给后面当输入,而 less 则会让你浏览它的输入。

Git 基础配置

接下来是至关重要的一步。如果你没有把这一步做好,之后使用 Git 可能会遇到问题。

Git 在管理代码时会储存管理者的名字和邮箱,所以你要告诉 Git 你叫什么以及你的邮箱是什么。运行:

$ git config --global user.name "你的名字"
$ git config --global user.email "你的邮箱"

然后试试:

$ cat ~/.gitconfig
[user]
	name = 你的名字
	email = 你的邮箱

可以看到,Git 把你的设置存在了文件 ~/.gitconfig 里。

接下来我们要配置 Git 使用的文本编辑器。如果你使用 Windows,你可能已经在安装时配置了编辑器。如果还没有配置,输入:

$ git config --global core.editor "编辑器启动命令"

其中编辑器启动命令可以是:

想了解 git config 的更多使用方法,运行 git config -h 或者 man git config