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


2241

执行该命令git clone git@github.com:whatever将在当前文件夹中创建一个名为whatever的目录,并将Git存储库的内容放入该文件夹中:

/httpdocs/whatever/public

我的问题是我需要将Git存储库的内容克隆到当前目录中,以便它们出现在Web服务器的正确位置:

/httpdocs/public

克隆存储库后,我知道如何移动文件,但这似乎破坏了Git,我希望能够通过调用来进行更新git pull。我怎样才能做到这一点?


3
在Windows上,您可以从要克隆repo的文件夹中移动文件(如果有),因此在执行git clone时为空。克隆后,将文件移回[ctrl-z]和whoala!如果当前文件夹为空,则使用:git clone giturl

43
瞧,就是拼写
Matthias

80
@MatthiasDailey 实际的拼写
silkfire

6
etvoilàetvoilà的法语
Fattie

Answers:


3217

选项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。


8
我还没有想到您的“更好”选项,尽管不确定为什么,我还是喜欢它。这有什么好处?
David Smith,2009年

6
它现在可能没有提供任何优势,但是如果您决定在某天左右移动东西,可能会为您节省很多麻烦。
Can BerkGüder09年

12
另外,您可以使用“更好”选项在多个版本之间快速切换。这特别有用,可用于服务器。
HalilÖzgür11年

4
@MEM我认为他的意思是创建一个指向.git的符号链接,即ln -s path/to/.git path/to/working/directory
Alexander

27
谁能解释一下这样做的好处?我今天有点忙。使用symlink如何使服务器受益?
2013年

586

我想很多人问这个问题的例子就是这个。如果您位于目录中,则要将git信息库的内容转储到该目录中,请运行:

git clone git@github.com:whatever .

“。” 最后将当前文件夹指定为检出文件夹。


28
是的,因此您不想在克隆到该文件夹​​之前在该文件夹中运行“ git init”。但是,如果这样做了,那么在克隆之前删除.git文件夹就可以了。
Magne

3
固定为我的答案中的空目录
csomakk

1
无法在nitroous.io中工作?即使清空后,也表示目录不为空
Tejas Manohar 2014年

@TejasManohar确保您还删除了隐藏文件。
2015年

ls -a将显示所有文件,包括隐藏文件。
Michael Dorst,

215

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

git clone git@github.com:whatever .

其他

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

9
实际上,当我只需要将已创建的项目推送到新创建的存储库时,这对我来说是最有用的答案。荣誉!
2014年

13
唯一指定如何签出到非空文件夹的答案,谢谢。
Preston Badeer 2015年

2
这确实很有帮助,因为git checkout的switch -t文档中并未明确显示on 。
彻塔巴那那

4
-t开关有什么作用?我收到一条中止消息,其中包含未跟踪文件的列表,这些文件将被结帐覆盖吗?在这种情况下该怎么办?我不希望这些文件被覆盖?
Momin Zahid

2
git的-t文档:-t,--track创建新分支时,设置“上游”配置。有关详细信息,请参见git-branch(1)中的“ --track”。
csomakk '17

87

基本的Git仓库克隆

您可以使用克隆一个存储库

git clone [url]

例如,如果要克隆斯坦福大学Drupal开放框架Git库,称为open_framework,则可以这样进行:

$ 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://协议,但是您可能还会看到使用SSH传输协议的http(s)://或user @ server:/path.git。


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

23

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

git -C /httpdocs clone git@github.com:whatever

尽管仍会whatever在其顶部创建一个文件夹,但是要将存储库的内容克隆到当前目录中,请使用以下语法:

cd /httpdocs
git clone git@github.com:whatever .

请注意,当目录为时才允许克隆到现有目录。

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


17

克隆到当前工作目录

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

克隆到另一个目录

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

希望能帮助到你 :)


这也对我有用。而不是./文件夹路径的开头
Alon Gouldman

13

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

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


13

克隆:

git clone git@jittre.unfuddle.com:jittre/name.git

克隆“特定分支”:

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git

13

如果要克隆到当前文件夹,则应尝试以下操作:

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

8
致命:目标路径“。” 已经存在,并且不是一个空目录。
克莱顿(Cleiton)

11

用法

git clone <repository>

将位于<repository>的存储库克隆到本地计算机上。原始存储库可以位于本地文件系统上,也可以位于可通过HTTP或SSH访问的远程计算机上。

git clone <repo> <directory>

将位于<repository>的存储库克隆到本地计算机上名为<directory>的文件夹中。

资料来源:建立资料库


9

如果要尝试将.git存储库检出到当前目录,请确保将其删除。

rm -rf .git 然后 git clone https://github.com/symfony/symfony-sandbox.git


3

这是我的处理方式,但是我已经替我做了一个别名。

$ cd ~Downloads/git; git clone https:git.foo/poo.git

这样做可能是更优雅的方式,但是我发现这对我自己来说是最简单的。

这是我创建的别名,可加快处理速度。我是为zsh制作的,但它对bash或其他任何外壳(如鱼,xyzsh,fizsh等)都可以正常工作。

使用您喜欢的编辑器进行编辑~/.zshrc/.bashrc等等(我是Leafpad,所以我会写$ leafpad ~/.zshrc)。

不过,我个人的喜好是制作一个zsh插件来跟踪我的所有别名。您可以通过运行以下命令为oh-my-zsh创建个人插件:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

然后,将这些行添加到新创建的空白alises.plugin文件中:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(在这里,用我的名字代替。)

然后,为了使别名起作用,必须将它们(与zsh一起)(或称为它的任何源)引入。为此,请在您的自定义插件文档中添加以下内容:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

保存您的oh-my-zsh插件,然后运行allsource。如果这似乎不起作用,只需运行source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh。这将加载插件源,这将允许您allsource从现在开始使用。


我正在使用所有别名创建一个Git存储库。请随时在此处检查它们:Ev的点文件。请随意分叉并改进它们以适合您的需求。


2

如果您正在使用ssh,则git cloning可以使用以下命令。

git -C path clone git@github.com:path_to_repo.git

例如: git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.git将git存储库拉requests到您的/home/ubuntu/路径。


2

由于某种原因,该语法不突出:

git clone repo-url [folder]

这里,文件夹是本地文件夹(将是本地存储库)的可选路径。

Git clone还将pull代码从远程存储库编码到本地存储库。实际上是真的:

git clone repo-url  =  git init + git remote add origin repo-url + git pull

0

尽管以上所有答案都不错,但我想提出一种新方法,而不是像在接受的答案中建议的BEST那样,在公共html目录中使用符号链接方法。您需要有权访问服务器虚拟主机配置。

它是关于直接指向存储库目录配置Web服务器的虚拟主机。在Apache中,您可以像这样:

DocumentRoot / var / www / html / website / your-git-repo

这是虚拟主机文件的示例:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>

0

您可以使用以下git命令克隆自定义目录名称

git clone <git_repo_url> <your_custom_directory_name>

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


-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .

-5

关于原始帖子中的这一行:

“克隆克隆后,我知道如何移动文件,但这似乎破坏了git”

我能够做到这一点,到目前为止,我的添加,提交,推送,拉取操作没有任何问题。

上面已经说明了这种方法,但并未分解为步骤。以下是对我有用的步骤:

  1. 将仓库克隆到任何新的临时文件夹中
  2. cd到您刚刚在本地克隆的根文件夹中
  3. 将文件夹的整个内容(包括/.git目录)复制到您喜欢的任何现有文件夹中;(例如,要与回购合并的Eclipse项目)

您刚刚将文件复制到的现有文件夹现在可以与git进行交互了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.