克隆时是否有传递给git的标志,比如不要克隆.git目录?如果不是,在克隆之后用一个标记删除.git目录怎么样?
git
.git
你可以一直这样做
git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
因为您只想要文件,所以不需要将其视为git回购。
rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .
这只适用于本地路径和远程ssh/rsync路径,如果远程服务器只提供git://或https://访问,它可能不起作用。
使用
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo rm -rf ./dirformynewrepo/.git
dirformynewrepo
或者,如果你已经安装了node . js,你可以使用以下命令:
npx degit GIT_REPO
npx随Node一起提供,它允许你运行基于二进制节点的包,而不需要先安装它们(或者,你可以先使用npm i -g degit全局安装degit)。
npx
npm i -g degit
degit
Degit是由Rich Harris创建的工具,他是slvelte和Rollup的创建者,他使用它通过克隆存储库而不保留git文件夹来快速创建一个新项目。但它也可以用来克隆任何回购一次…
对于那些怀疑--depth 1解决方案的人,因为它仍然下载.git目录,然后你需要手动删除它,也许你需要知道git克隆实际上是如何工作的。
--depth 1
当你通常克隆一个repo, git下载你所有的文件(跨越提交)到.git目录。当你用--depth 1克隆时,git只下载最新版本的文件到.git。之后,git将checkout或从.git检索这些文件到工作目录(不再下载)。
checkout
通常,因为.git中的文件对象是压缩的,所以下载带有git clone --depth 1的文件会比下载未压缩的文件节省更多带宽。对于一些网速较慢的人来说,这是值得的(需要运行rm -rf)。
git clone --depth 1
rm -rf
我个人认为git archive解决方案更好,但由于GitHub不支持,--depth 1是正确的选择。
git archive
git archive --remote已经实现了这一点。
git archive --remote
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
我更喜欢这个解决方案,因为我不喜欢rm -rfing事情自动。它只是rms一个.git文件,这意味着它永远不会意外rm -rf一个错误的.git目录
rm
它依赖于mktemp命令,所以它将在*nix系统中工作(从我看到的情况来看,mktemp需要进一步工作才能在MacOS上工作,所以如果有人想评论一个工作解决方案,我会添加它)
mktemp
在zsh中,我将其作为一个函数,以确保定义了dir值:
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目录指定一个路径。由此产生的“项目”;将有一个.git文件(不是目录),其内容将是一行:
--separate-git-dir
gitdir: <the dir you specified in the flag>
因为我们在mktemp命令中使用了tmp目录,所以实际的.git目录内容将在tmp目录中结束。我们还使用--depth=1,因此它在tmp dirs上占用更少的空间。
--depth=1
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo1 rd /s /q .\dirformynewrepo1\.git
这适用于Windows系统
如果存储库包含一些标记,您可以简单地下载该标记的zip:
curl -L https://github.com/<user>/<repo-name>/archive/refs/tags/v1.2.3.zip | tar xz
这将下载并解压缩克隆的存储库,但没有.git文件夹。生成的文件夹将是<repo-name>-1.2.3
<repo-name>-1.2.3