当前位置:   article > 正文

GIT 命令学习:获取与创建项目_git --separate-git-dir

git --separate-git-dir

GIT命令


获取和创建命令

init
init主要是用来创建一个git库或者重新初始化一个已经存在的库。这个命令会 创建一个.git目录,其中会包含objects、refs/heads、refs/tags子目录以及一些模版文件,并且一个指向主分支HEAD的初始的HEAD文件也同时被创建了。在一个已经存在的库上进行git init命令是安全的,不用担心会对该库的文件进行重写覆盖。
1、命令格式
git init [-q | --quiet] [--bare] [--template=<template_directory>]
[--separate-git-dir <git dir>]
[--shared[=<permissions>]] [directory]
2、参数选项
1) -q  --quiet
只输出错误和警告信息,其他输出会被禁止。
2) --bare
创建一个的裸库,如果 GIT_DIR环境变量没有设置,就会将当前目录设置为该环境变量。
3) --template=<template_directory>
指明使用的模版目录。
4) --separate-git-dir=<git dir>
创建一个文本文件包含了真正库的路径代替在指定的路径($GIT_DIR 或者 ./.git)中初始化仓库。如果是重新初始化,则会将库转移至新的路径下。
5) --shared[=(false|true|umask|group|all|world|everybody|0xxx)]
指明该库被多个用户共享。这样就可以让同一个工作组的人员向库提交文件。之后的参数指明了权限要求。

clone
clone主要用来克隆一个库到新的目录下,对被克隆的库的各个分支创建远程追踪(remote-tracking)分支,创建并检验从被克隆库的存活分支所分过来的初始分支。克隆之后:不带参数的简单命令(git fetch)就能更新所有追踪的分支;不带参数的命令(git pull)就能将远程的主分支(master branch)合并到本地的主分支。这些默认的配置需要通过 在 refs/remotes/origin 下引用远程分支的heads 或者初始化 remote.origin.url 和 remote.origin.fetch 两个配置变量。
1、命令格式
git clone [--template=<template_directory>]
	  [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
	  [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
	  [--dissociate] [--separate-git-dir <git dir>]
	  [--depth <depth>] [--[no-]single-branch]
	  [--recursive | --recurse-submodules] [--[no-]shallow-submodules]
	  [--jobs <n>] [--] <repository> [<directory>]
2、参数选项
1) --local -l
当被克隆的库在本地的机器上时, 通过复制HEAD文件以及objects、refs两个目录下的文件来克隆库(repository)。如果repo被指明为本地路径,--local本质上是一个无效的操作符。如果repo被指定为一个URL,这个参数会被忽略。当 指明为本地路径时 --no-local会被常规的Git 传输方法重载。
2) --no-hardlinks
强制将克隆进程由利用hardlinks转换到复制 .git/objects目录下的所有文件。
3) --shared  -s
当不利用hard links 克隆本地repo时,自动建立 .git/objects/info/alternates 来共享源repo。这会导致repo没有自己的对象。
4) --reference[-if-able] <repository>
如果引用的repo在本地机器上,自动的建立.git/objects/info/alternates 来从引用的repo获取对象。利用一个已经存在的repo作为可以替换的repo,可以减少对克隆对象的文件复制以减少网络和本地存储消耗。当使用--reference-if-able,会对不存在的目录弹出警告并跳过而不是终止克隆。
5) --dissociate
借用由--reference之命的引用对象来减少网络传输,当克隆的是本地的借用对象时该借用会被终止。
6) --quiet -q
只输出错误和警告信息,其他输出会被禁止。
7) --verbose   -v
完整运行,不影响输出。
8) --progress
操作执行状态会被默认地输出到终端,除非设置了 -q 。这个标志在标准错误流没有被定向时也会强制的将执行状态输出到终端。
9) --no-checkout  -no
在clone完成后不检测HEAD。
10) --bare
创建一个裸repo。
11)--mirror
创建一个源repo的镜像,暗含了 --bare。相比于 -- bare,--mirror不仅将源的本地分支映射到目标本地分支,也会映射其所有的refs(包括远程追踪分支、notes等)并建立一个引用说明配置(refs configuration)使得所有的refs都会通过目的repo中的 git remote update 重写。
12) --origin <name>   -o <name>
利用 <name> 代替 远程名字 origin 来保持对上游repo的追踪
13) --branch <name>   -b <name>
新建的HEAD指向名为<name>的分支,而不是指向被克隆repo的HEAD指向的分支。在非裸repo中,这个分支将会被check out。
14) --upload-pack <upload-pack>    -u <upload-pack>
通过ssh获取需要克隆的repo,需要指明一个非默认路径给另一端的命令。
15) --template=<template_directory>
指明所使用的模版目录。
16) --config <key>=<value>  -c <key>=<value>
对新建的repo进行变量配置,在库被初始化后直接生效。
17) --depth <depth>
根据给出的历史中的提交编号来创建一个浅层的克隆。
18) --shallow-since=<date>
根据指明的历史时间来创建一个浅层的clone。
19) --shallow-exclude=<revision>
根据排除某些分支或者标签来创建浅层的clone。
20) --[no-]single-branch
克隆由 --branch 选项或者 基础分支的远程HEAD所指向的单个分支。
21) --recursive  --recurse-submodules
克隆结束之后利用默认设置初始化所有子模块。等价于:git submodule update --init --recursive
22) --[no-]shallow-submodules
所有的子模块都是以depth为1的浅层clone。
23) --separate-git-dir=<git dir>
在指定的目录下放置克隆的库,然后设置一个与文件系无关的git符号指向它。
24)-j <n>  --jobs <n>
设置同时获取的子模块数量。
25)<repository>
设定被克隆的repo。通常利用git urls 来指定。
26)<directory>
克隆repo所安放的目录。

关于GIT URLS

通常情况下,URLs中都包含了所指定的传输协议、远程服务器地址、repo的路径。根据不同的协议,有些部分可以省去。Git支持ssh、git、http、https协议(ftp、ftps可用于 fetch但是低效,不建议使用)。git协议并不包含验证,因此使用时注意安全性。
各种协议的格式如下:
ssh://[user@]host.xz[:port]/path/to/repo.git/
[user@]host.xz:path/to/repo.git/    (基于ssh协议的一种可选方式)

git://host.xz[:port]/path/to/repo.git/

http[s]://host.xz[:port]/path/to/repo.git/

ftp[s]://host.xz[:port]/path/to/repo.git/
ssh和git协议支持额外的 ~username 扩展:
ssh://[user@]host.xz[:port]/~[user]/path/to/repo.git/

git://host.xz[:port]/~[user]/path/to/repo.git/

[user@]host.xz:/~[user]/path/to/repo.git/
对于本地repo:
/path/to/repo.git/

file:///path/to/repo.git/

Git本身并不会处理传输协议,都是利用 remote <transport> 的远程助手(remote helper)。如果远程助手不存在,需要用相关语句提前指明:  <transport> :: <address>   其中,<address> 可以是本地路径、服务器路径等。

如果在存在多个相似命名的远程repo而你又想用个不同的形式保存,可以使用urls替换语法配置来进行clone。
[url "<actual url base>"]
		insteadOf = <other url base>
如果仅仅是想在push时采用rewrite URLs:
[url "<actual url base>"]
		pushInsteadOf = <other url base>


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/705466
推荐阅读
相关标签
  

闽ICP备14008679号