如何将Git仓库克隆到特定文件夹?

3007

使用命令 git clone git@github.com:whatever 可以创建一个名为 whatever 的目录,其中包含一个 Git 仓库:

./
    whatever/
        .git

我希望将Git仓库的内容克隆到当前目录./中:

./
    .git

7
在Windows上,你可以将文件从包含要克隆的代码库的文件夹中移出,这样当你执行 git clone 命令时该文件夹就为空了。克隆完成后,再将文件移回去[使用ctrl-z撤销操作],然后就大功告成啦! 如果当前文件夹是空的,只需使用 git clone giturl 命令即可。 - user1188429
21个回答

4249

选项 A:

git clone git@github.com:whatever folder-name

因此,对于right here的使用,请使用:

git clone git@github.com:whatever .

选项B:

同时移动.git文件夹。注意,.git文件夹在大多数图形文件浏览器中是隐藏的,所以请确保显示隐藏文件。

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

第一行代码抓取所有普通文件,第二行代码抓取隐藏文件。也可以通过启用dotglob(即shopt -s dotglob)在一行中完成,但如果您正在寻求本回答所解决的问题,则这可能是不好的解决方案。

更好的方法:

将您的工作副本放在其他地方,并创建一个符号链接。就像这样:

ln -s /where/it/is/right/now /the/path/I/want/to/use
对于您的情况,这将是类似于以下内容:
ln -sfn /opt/projectA/prod/public /httpdocs/public

如果需要,这很容易改为测试形式,例如:

ln -sfn /opt/projectA/test/public /httpdocs/public

添加-fn(其中-f是强制选项,-n避免一些经常不需要的与现有或不存在的链接的交互),而不需要移动文件。如果只是想让它工作,请使用选项A;如果其他人要查看您所做的内容,请使用选项C。


16
我没有考虑你提出的“更好的选择”,虽然我不确定原因,但我很喜欢。这个选项有什么优点? - David Smith
9
现在可能没有提供任何优势,但如果您决定将东西移动到其他地方,它可能会为您节省大量麻烦。 - Can Berk Güder
14
此功能还可以通过"更好的是"选项快速在版本之间切换。这对服务器特别有用且被广泛使用。 - Halil Özgür
5
@MEM 我认为他的意思是创建一个指向.git的符号链接,即 ln -s path/to/.git path/to/working/directory - Alexander
34
有人能解释一下这有什么好处吗?今天我有点迟钝。使用符号链接如何使服务器受益? - triple
显示剩余15条评论

647

我认为很多人问这个问题时想要的示例是这个。如果你在想要将git仓库内容转储到的目录中,运行以下命令:

git clone git@github.com:whatever .

在末尾的"."指定当前文件夹作为检出文件夹。


36
所以您不想在克隆之前在此文件夹中运行“git init”。但如果您已经运行了它,那么在克隆之前删除.git文件夹就可以解决问题。 - Magne
5
我的回答中已修复了空目录的问题。 - csomakk
3
在 Nitrous.io 上无法使这个工作吗?即使清空了,它仍然显示目录不为空。 - Tejas Manohar
@TejasManohar 确保您也已删除了隐藏文件。 - Britic
ls -a 将显示所有文件,包括隐藏的文件。 - Michael Dorst
你可以使用 mkdir 命令创建一个新的空文件夹。 - Hu Xixi

263

进入文件夹.. 如果文件夹为空,则:

git clone git@github.com:whatever .
否则
git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

10
当我需要将已创建的项目推到新创建的仓库时,这个答案对我非常有用。谢谢! - wirher
16
只需要回答如何在非空文件夹中进行结账的问题即可,谢谢。 - Preston Badeer
3
这真的很有帮助,因为git checkout的文档上并没有清楚地显示switch -t的用法。 - eQ19
5
“-t”开关是指定git clone命令将要克隆的远程分支。如果您在使用git checkout时收到“abort”消息,并列出一些未跟踪的文件将被覆盖的情况下,这意味着您本地的文件与要检出的分支不匹配。要避免这种情况,可以使用git stash命令保存本地更改,然后使用git checkout命令进行检出,最后再使用git stash pop命令恢复本地更改。 - Momin Zahid
3
-t文档来自git: -t,--track 在创建新分支时,设置“上游”配置。有关详情,请参见git-branch(1)中的“--track”。 - csomakk
显示剩余3条评论

120

基本的Git仓库克隆

您可以使用以下命令克隆一个仓库:

git clone [url]
例如,如果您想克隆名为open_framework的斯坦福大学Drupal开放框架Git库,可以按照以下方式执行:
$ git clone git://github.com/SU-SWS/open_framework.git

这将在当前本地文件系统位置创建一个名为open_framework的目录,在其中初始化一个.git目录,下载该仓库的所有数据,并检出最新版本的工作副本。如果您进入新创建的open_framework目录,您将看到其中的项目文件已准备好进行处理或使用。

如果您想将存储库克隆到与open_framework不同的目录中,可以将其指定为下一个命令行选项:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

那个命令做的事情和之前的一样,只是目标目录名叫做mynewtheme。

Git有许多不同的传输协议可供使用。之前的例子使用git://协议,但您也可能看到http(s)://或user@server:/path.git,这使用SSH传输协议。


这将自动在您当前的文件夹中创建一个文件夹,并将文件放置在其中。因此,您不必担心覆盖其他文件夹。 - arn-arn

90
你可以使用以下的Git命令来克隆代码库并设置自定义目录名。
git clone <git_repo_url> <your_custom_directory_name>

注意: 您不需要创建自定义目录,因为它将自动创建。


72

要将git仓库克隆到特定文件夹中,您可以使用-C <path>参数,例如:

git -C /httpdocs clone git@github.com:whatever
尽管它仍会在其上创建一个 whatever 文件夹,但要将存储库的内容克隆到当前目录中,请使用以下语法:
cd /httpdocs
git clone git@github.com:whatever .

请注意,仅在目录为空时才允许将克隆到现有目录中。

由于您正在克隆到可供公共访问的文件夹,请考虑使用--separate-git-dir=<git dir>将Git存储库与工作树分离,或在Web服务器配置中排除.git文件夹(例如在.htaccess文件中)。


50

要克隆到当前工作目录

git clone https://github.com/link.git

想要克隆至另一个目录:

git clone https://github.com/link.git ./Folder1/Folder2

1
这对我也起作用了。路径到文件夹的开头没有使用 ./ - Alon Gouldman
通过这种方法克隆仓库仍然会创建仓库自己的文件夹名称,而不是使用当前工作目录的名称。例如:/present-directory/link/ 而不是 /present-directory/。 - Joel Karunungan

20

如果你想克隆到当前文件夹,你应该尝试这个命令:

git clone https://github.com/example/example.git ./

14
致命错误:目标路径“。”已经存在且不是空目录。 - Cleiton

19

使用方法

git clone <repository>

在本地机器上克隆位于<repository>的代码库,原始代码库可以位于本地文件系统或通过HTTP或SSH访问的远程机器上。

git clone <repo> <directory>

将位于<repository>的仓库克隆到本地机器上名为<directory>的文件夹中。

来源:设置一个仓库


19

当您将文件移动到所需的位置时,您是否也在移动.git目录?根据您的操作系统和配置,此目录可能会被隐藏。

它包含仓库和支持文件,而位于/public目录中的项目文件仅是当前签出提交(默认为主分支)的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,