在执行克隆时,是否有一个标志要传递给git,比如不要克隆.git目录?如果没有,那么在克隆后删除.git目录的标志如何?
git
.git
uwopmtnx1#
使用
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo rm -rf ./dirformynewrepo/.git
dirformynewrepo
zzzyeukh2#
因为你只需要文件,所以你不需要把它当作git仓库。
rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .
而且这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,它可能不起作用。
3b6akqbq3#
或者,如果安装了Node.js,则可以使用以下命令:npx degit GIT_REPOnpx随Node一起提供,它允许您运行基于节点的二进制包,而无需先安装它们(或者,您可以先使用npm i -g degit全局安装degit)。Degit是Rich Harris创建的一个工具,他是Svelte和Rollup的创建者,他用它来快速创建一个新项目,方法是克隆一个存储库,而不保留git文件夹。但它也可以用来克隆任何回购一次。。
npx degit GIT_REPO
npx
npm i -g degit
degit
fdbelqdn4#
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
我更喜欢这个解决方案,因为我不喜欢自动执行rm -rf操作。它只是rm的. git文件,这意味着它永远不会意外地rm -rf错误的. git目录。它依赖于mktemp命令,所以它可以在 * nix系统上工作(从我所看到的来看,这需要进一步的工作,以便在MacOS上工作,所以如果有人想评论一个工作解决方案,我会添加它)在zsh中,我将其作为一个函数,以确保定义了dir值:
rm -rf
rm
mktemp
dir
alias np='node-project' function node-project() { dir=${1:-.} git clone --separate-git-dir=$(mktemp -u) --depth=1 <my-node-repo> $dir && rm $dir/.git }
--separate-git-dir标志允许您指定. git目录的路径。生成的"project"将有一个. git文件(不是目录),其内容将是一行:
--separate-git-dir
gitdir: <the dir you specified in the flag>
因为我们在mktemp命令中使用了一个tmp目录,所以实际的.git目录内容将以一个tmp目录结束。我们还使用了--depth=1,因此它在tmp目录上占用的空间更少。
--depth=1
vi4fp9gy5#
对于那些怀疑the --depth 1 solution的人,因为它仍然下载.git目录,你需要手动删除它之后,也许你需要知道how git clone actually works。当你正常克隆一个repo时,git会将你所有的文件(跨提交)下载到.git目录。当你使用--depth 1进行克隆时,git只会将最新版本的文件下载到.git中。之后,git会将checkout或从.git中检索这些文件到工作目录中(不再下载)。通常情况下,因为.git中的文件对象是压缩的,所以您可以通过使用git clone --depth 1下载文件而不是下载未压缩的文件来保存更多的带宽。而对于一些互联网速度慢的人来说,这是值得的价格(需要运行rm -rf)。我个人认为the git archive solution更好,但由于GitHub不支持它,所以--depth 1是一种选择。
--depth 1
checkout
git clone --depth 1
git archive
5f0d552i6#
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo1 rd /s /q .\dirformynewrepo1\.git
这适用于windows系统
vaj7vani7#
git archive --remote已经实现了这一点。
git archive --remote
31moq8wy8#
如果仓库在GitHub上,您可以简单地下载任何标签的ZIP文件:
curl -L https://github.com/<user>/<repo-name>/archive/refs/tags/v1.2.3.zip | tar xz
这将下载并解压缩存储库。内容将在<repo-name>-1.2.3中,没有.git文件夹。
<repo-name>-1.2.3
tgabmvqs9#
你总是可以
git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
9条答案
按热度按时间uwopmtnx1#
使用
dirformynewrepo
不再是Git仓库。zzzyeukh2#
因为你只需要文件,所以你不需要把它当作git仓库。
而且这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,它可能不起作用。
3b6akqbq3#
或者,如果安装了Node.js,则可以使用以下命令:
npx degit GIT_REPO
npx
随Node一起提供,它允许您运行基于节点的二进制包,而无需先安装它们(或者,您可以先使用npm i -g degit
全局安装degit
)。Degit是Rich Harris创建的一个工具,他是Svelte和Rollup的创建者,他用它来快速创建一个新项目,方法是克隆一个存储库,而不保留git文件夹。但它也可以用来克隆任何回购一次。。
fdbelqdn4#
我更喜欢这个解决方案,因为我不喜欢自动执行
rm -rf
操作。它只是rm
的. git文件,这意味着它永远不会意外地rm -rf
错误的. git目录。它依赖于
mktemp
命令,所以它可以在 * nix系统上工作(从我所看到的来看,这需要进一步的工作,以便在MacOS上工作,所以如果有人想评论一个工作解决方案,我会添加它)在zsh中,我将其作为一个函数,以确保定义了
dir
值:说明
--separate-git-dir
标志允许您指定. git目录的路径。生成的"project"将有一个. git文件(不是目录),其内容将是一行:因为我们在
mktemp
命令中使用了一个tmp目录,所以实际的.git
目录内容将以一个tmp目录结束。我们还使用了--depth=1
,因此它在tmp目录上占用的空间更少。vi4fp9gy5#
对于那些怀疑the
--depth 1
solution的人,因为它仍然下载.git
目录,你需要手动删除它之后,也许你需要知道how git clone actually works。当你正常克隆一个repo时,git会将你所有的文件(跨提交)下载到
.git
目录。当你使用--depth 1
进行克隆时,git只会将最新版本的文件下载到.git
中。之后,git会将checkout
或从.git
中检索这些文件到工作目录中(不再下载)。通常情况下,因为
.git
中的文件对象是压缩的,所以您可以通过使用git clone --depth 1
下载文件而不是下载未压缩的文件来保存更多的带宽。而对于一些互联网速度慢的人来说,这是值得的价格(需要运行rm -rf
)。我个人认为the
git archive
solution更好,但由于GitHub不支持它,所以--depth 1
是一种选择。5f0d552i6#
这适用于windows系统
vaj7vani7#
git archive --remote
已经实现了这一点。31moq8wy8#
如果仓库在GitHub上,您可以简单地下载任何标签的ZIP文件:
这将下载并解压缩存储库。内容将在
<repo-name>-1.2.3
中,没有.git
文件夹。tgabmvqs9#
你总是可以