在进行克隆时,是否有可以传递给git
的标志,比如说不要克隆.git
目录?如果没有,那么是否有一个标志可以在克隆之后删除.git
目录?
在进行克隆时,是否有可以传递给git
的标志,比如说不要克隆.git
目录?如果没有,那么是否有一个标志可以在克隆之后删除.git
目录?
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
dirformynewrepo
不再是Git仓库。!$
虽然在技术上是正确的,但对于不熟悉语法的人来说并没有帮助他们理解实际问题的答案。它还依赖于第二个命令直接跟随第一个命令,并且在同一个shell中执行。如果有人省略了这些隐含的要求,他们可能会意外删除其他内容。因此,我建议您通过显式指定名称dirformynewrepo
作为rm
命令的参数来改进您的答案,因为这将使两个命令之间的关联更加清晰。 - davidAgit --git-dir=/dev/null
呢? - Rainb因为您只需要文件,所以不需要将其视为git仓库。
rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .
这仅适用于本地路径和远程ssh/rsync路径,如果远程服务器仅提供git://或https://访问,则可能无法正常工作。
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
我更喜欢这个解决方案,因为我不喜欢自动删除东西的 rm -rf
。它只会 rm
掉 .git 文件,这意味着它永远不会意外地 rm -rf
错误的 .git 目录。
它依赖于 mktemp
命令,因此只能在 *nix 系统上运行(从我的了解来看,在 MacOS 上需要进一步处理才能让 mktemp
正常工作,如果有人想评论一个可行的解决方案,我会添加它)
在 zsh 中,我将其制作成一个函数,以确保定义了一个 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文件(而不是目录),其内容将是单行:
gitdir: <the dir you specified in the flag>
因为我们使用了带有mktemp
命令的tmp目录,实际的.git
目录内容将最终保存在一个tmp目录中。我们还使用了--depth = 1
,因此在tmp目录上需要更少的空间。
.git
等效文件夹,只是存储在 mktemp
选择的位置,而不是 git clone
目标。当您按照此答案执行 rm <dir>/.git
时,实际上只是删除到在其他地方创建的临时文件夹的符号链接,其中包含正常的 .git
文件。这些文件将保留,直到操作系统自动清理 --separate-git-dir
使用的临时目录。因此,为了正确清理,您可能仍然需要使用 rm -rf
,只是针对存储在临时文件夹中而不是克隆目标中的 git
文件夹。 - mbafford对于那些怀疑使用--depth 1
解决方案的人,因为它仍然会下载.git
目录并且需要手动删除它,也许你需要了解git clone实际工作原理。
当你正常地克隆一个repo时,git会将所有文件(跨越提交)下载到.git
目录中。当你使用--depth 1
克隆时,git只会将最新版本的文件下载到.git
中。之后,git会checkout
或从.git
中检索这些文件到工作目录中(不再进行下载)。
通常情况下,由于.git
内部的文件对象是压缩的,因此通过git clone --depth 1
下载文件比下载未压缩的文件可以节省更多带宽。对于一些网络较慢的人来说,这是值得的(需要运行rm -rf
命令的代价)。
git archive
解决方案更好,但由于GitHub不支持,--depth 1
是可行的选择。curl -L https://github.com/${owner}/${repo}/tarball/master | tar xz
呢? - Des Nergercurl -L https://github.com/<user>/<repo-name>/archive/refs/tags/v1.2.3.zip | tar xz
<repo-name>-1.2.3
文件夹中,没有.git
文件夹。git archive --remote
已经实现了这个功能。
git archive --remote
组合,但都失败了,并显示 Invalid command: 'git-upload-archive '<repo>'
。 - Guido Tarsiagit archive --remote git@gitlab.com:gitlab-org/gitlab.git -o gitlab_15.9.3ee.tgz v15.9.3-ee
- mr.wollegit clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo1
rd /s /q .\dirformynewrepo1\.git
这适用于Windows系统
你总是可以做到的
git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
.git
目录的情况下克隆(远程)存储库。所谓的重复问题是询问如何导出已经有.git
目录的现有存储库。 - mknafgit archive
命令归档远程存储库。 - Vladislav Rastrusny