【问题标题】:How do you clone a Git repository into a specific folder?如何将 Git 存储库克隆到特定文件夹中?
【发布时间】:2010-10-13 15:45:02
【问题描述】:

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

/httpdocs/whatever/public

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

/httpdocs/public

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

【问题讨论】:

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

标签: git repository git-clone


【解决方案1】:

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

【讨论】:

  • 我没有想到您的“更好”选项,虽然我不知道为什么,但我喜欢它。这样做有什么好处?
  • 它现在可能没有任何优势,但如果你决定有一天搬东西,它可能会为你省去很多麻烦。
  • 此外,您还可以使用“更好”选项在版本之间快速切换。这对于服务器特别有用。
  • @MEM 我认为他的意思是创建一个指向 .git 的符号链接,即ln -s path/to/.git path/to/working/directory
  • 谁能解释一下这样做的好处?我今天有点密集。使用符号链接对服务器有何好处?
【解决方案2】:

我想很多人问这个问题的例子是这个。如果您在 您希望将 git 存储库的内容转储到的目录中,请运行:

git clone git@github.com:whatever .

“。”最后指定当前文件夹为结帐文件夹。

【讨论】:

  • true,因此您不想在克隆到该文件夹​​之前在该文件夹中运行“git init”。但如果你这样做了,那么在克隆之前删除 .git 文件夹就可以了。
  • 修复了我的答案中的空目录
  • 无法在 nitrous.io 中使用它?即使清空后,它说目录不是空的
  • @TejasManohar 确保您也删除了隐藏文件。
  • ls -a 将显示所有文件,包括隐藏文件。
【解决方案3】:

进入文件夹..如果文件夹是空的,那么:

git clone git@github.com:whatever .

其他

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

【讨论】:

  • 实际上,当我只需要将已创建的项目推送到新创建的存储库时,这对我来说是最有用的答案。赞一个!
  • 唯一的答案,指定如何结帐到非空文件夹,谢谢。
  • 这真的很有帮助,因为 git checkout 的文档中没有清楚地显示 switch -t
  • -t 开关有什么作用?我收到一条中止消息,其中包含将被结帐覆盖的未跟踪文件列表?在这种情况下该怎么办?我不希望这些文件被覆盖?
  • -t 来自 git 的文档:-t, --track 创建新分支时,设置“上游”配置。有关详细信息,请参阅 git-branch(1) 中的“--track”。
【解决方案4】:

基本 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 传输协议。

【讨论】:

  • 这将自动在您当前的文件夹中创建一个文件夹并将文件放在那里。因此,您无需担心会覆盖任何其他文件夹。
【解决方案5】:

要将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 文件中)。

【讨论】:

    【解决方案6】:

    克隆到当前工作目录

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

    克隆到另一个目录

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

    希望对你有帮助:)

    【讨论】:

    • 这对我也有用。不是文件夹路径开头的./
    • 通过此方法克隆仍然会创建 repo 自己的文件夹名称,而不是使用当前工作目录的名称。例如/present-directory/link/ 而不是 /present-directory/
    【解决方案7】:

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

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

    【讨论】:

    • 致命:目标路径 '.'已存在且不是空目录。
    【解决方案8】:

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

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

    【讨论】:

      【解决方案9】:

      用法

      git clone <repository>
      

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

      git clone <repo> <directory>
      

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

      来源:Setting up a repository

      【讨论】:

        【解决方案10】:

        克隆:

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

        克隆“特定分支”:

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

        【讨论】:

          【解决方案11】:

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

          git clone <git_repo_url> <your_custom_directory_name>
          

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

          【讨论】:

            【解决方案12】:

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

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

            【讨论】:

              【解决方案13】:

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

              git clone repo-url [folder]

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

              Git clone 还将 pull 代码从远程存储库到本地存储库。 事实上确实如此:

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

              【讨论】:

                【解决方案14】:

                我会这样做,但我已经为我做了一个别名。

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

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

                这是我为加快速度而创建的别名。我为 zsh 制作了它,但它应该适用于 bash 或任何其他 shell,如 fish、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)必须是 source-in (或其他任何名称)。为此,请在您的自定义插件文档中添加以下内容:

                ## 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's dot-files。请随时 fork 和改进它们以满足您的需求。

                【讨论】:

                  【解决方案15】:

                  如果您将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 会将 requests 的 git 存储库拉到您的 /home/ubuntu/ 路径中。

                  【讨论】:

                    【解决方案16】:

                    如果您在要将 git 存储库的内容转储到的目录中,请运行:

                    git clone git@github.com:origin .
                    

                    “。”最后指定当前文件夹为结帐文件夹。

                    【讨论】:

                      【解决方案17】:

                      虽然上述所有答案都很好,但我想提出一种新方法,而不是使用公共 html 目录中的符号链接方法,如已接受答案中建议的 BEST。您需要有权访问您的服务器虚拟主机配置。

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

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

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

                      <VirtualHost *:443>
                          ServerName example.com
                      
                          DocumentRoot /path/to/your-git-repo
                          ...
                          ...
                          ...
                          ...
                      </VirtualHost>
                      

                      【讨论】:

                        【解决方案18】:
                        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 .
                        

                        【讨论】:

                          【解决方案19】:

                          关于原帖中的这一行:

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

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

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

                          1. 将 repo 克隆到任何新的临时文件夹中
                          2. cd 到您刚刚在本地克隆的根文件夹
                          3. 将文件夹的全部内容,包括 /.git 目录 - 复制到您喜欢的任何现有文件夹中; (比如说一个你想与你的仓库合并的 Eclipse 项目)

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2014-08-22
                            • 2022-08-14
                            • 2019-04-29
                            • 1970-01-01
                            • 2016-08-15
                            • 1970-01-01
                            相关资源
                            最近更新 更多