Jus*_*tin 134 git version-control git-clone
git
做克隆时是否有传递给的标志,比如说不克隆.git
目录?如果没有,.git
克隆后删除目录的标志怎么样?
Ada*_*ruk 202
使用
git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
Run Code Online (Sandbox Code Playgroud)
dirformynewrepo
不再是Git存储库.Hua*_*Tao 26
因为你只需要文件,所以你不需要把它当作git仓库.
rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .
Run Code Online (Sandbox Code Playgroud)
这仅适用于本地路径和远程ssh/rsync路径,如果远程服务器仅提供git://或https://访问,则它可能无效.
era*_*ros 11
git clone --separate-git-dir=$(mktemp -u) --depth=1 <repo> <dir> && rm <dir>/.git
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个解决方案,因为我不喜欢rm -rf
自动处理事情。它只是rm
一个 .git 文件,这意味着它永远不会意外地出现rm -rf
错误的 .git 目录
它依赖于mktemp
命令,所以它可以在 *nix 系统上工作(据我所知,这需要进一步的工作才能mktemp
在 MacOS 上工作,所以如果有人想评论一个工作解决方案,我会添加它)
在 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
}
Run Code Online (Sandbox Code Playgroud)
该--separate-git-dir
标志允许您指定 .git 目录的路径。生成的“项目”将有一个 .git 文件(不是目录),其内容将是一行:
gitdir: <the dir you specified in the flag>
Run Code Online (Sandbox Code Playgroud)
因为我们在命令中使用了 tmp dir mktemp
,所以实际的.git
目录内容最终将位于 tmp dir 中。我们还使用了 a --depth=1
,因此它在 tmp 目录上占用的空间更少。
对于那些怀疑该--depth 1
解决方案的人,因为它仍然下载.git
目录并且您需要随后手动删除它,也许您需要知道git clone 实际上是如何工作的。
当您通常克隆存储库时, git 将所有文件(跨越提交)下载到目录中.git
。当您使用 克隆时--depth 1
,git 仅将最新版本的文件下载到.git
. 之后,git 将从工作目录中checkout
检索这些文件.git
(不再下载)。
通常,由于内部的文件对象是压缩的,因此通过下载文件而不是下载未压缩的文件.git
可以节省更多带宽。git clone --depth 1
对于一些网速慢的人来说,这是值得的(需要运行rm -rf
)。
我个人认为该git archive
解决方案更好,但由于 GitHub 不支持它,所以--depth 1
这是可行的方法。
小智 -2
你总是可以做
git clone git://repo.org/fossproject.git && rm -rf fossproject/.git
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89632 次 |
最近记录: |