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

Dav*_*ith 2083 git repository git-clone

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

/httpdocs/whatever/public
Run Code Online (Sandbox Code Playgroud)

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

/httpdocs/public
Run Code Online (Sandbox Code Playgroud)

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

Can*_*der 2989

选项A:

git clone git@github.com:whatever folder-name
Run Code Online (Sandbox Code Playgroud)

选项B:

也移动.git文件夹.

更好的是:

将工作副本保存在其他位置,并创建符号链接.

  • 谁能解释一下这个好处?我今天有点密集.如何使用符号链接使服务器受益? (27认同)
  • 此外,您可以使用"更好"选项快速切换版本.这特别有用,可用于服务器. (12认同)
  • 我没有想到你的"更好"选项,我喜欢它,虽然我不知道为什么.这有什么好处? (7认同)
  • 它现在可能没有提供任何优势,但如果您决定在某一天移动东西,它可能会为您省去很多麻烦. (6认同)
  • @MEM我认为他的意思是创建一个符号链接到.git即`ln -s path/to/.git path/to/working/directory` (4认同)
  • 大家好,我有同样的问题。我对符号链接不是很熟悉,但是对它们的工作原理有所了解。我将如何设置一个解决OP问题? (2认同)
  • @Can Berk Gueder:您能否提供更多详细信息,或将链接添加到“更好的选择”。谢谢。 (2认同)
  • 这一切都不起作用-这也不是J Wynia的以下作品。我花了数小时试图将Google的有角种子目录添加到Apache htdocs目录中的命名目录中。没有有关此操作的教程。有人应该针对git和AngularJS的新用户编写一个教程。 (2认同)
  • 应该真正说明“无论”论证应该做什么,如果没有解释,它是难以理解的。 (2认同)
  • 我遇到以下错误:`fatal:目标路径'folderName' 已经存在并且不是空目录。`不能只是强制覆盖文件。@Can Berk Güder (2认同)
  • 我得到“致命:目标路径'repo_name'已经存在并且不是空目录”。我认为这对于已经存在的目录是不可能的。 (2认同)

J W*_*nia 579

我认为很多人问这个问题的例子就是这个.如果您目录中希望转储git存储库的内容,请运行:

git clone git@github.com:whatever .
Run Code Online (Sandbox Code Playgroud)

"." 最后将当前文件夹指定为checkout文件夹.

  • 如果该目录不为空,则不起作用. (89认同)
  • 是的,所以你不想在克隆到它之前在这个文件夹中运行"git init".但是,如果你这样做,那么在克隆之前删除.git文件夹就可以了. (27认同)
  • 修复了我的答案中的空目录 (3认同)
  • 不能让它在nitrous.io中工作吗?即使清空后,它也说目录不是空的 (2认同)

cso*_*akk 210

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

git clone git@github.com:whatever .
Run Code Online (Sandbox Code Playgroud)

其他

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master
Run Code Online (Sandbox Code Playgroud)

  • 只有答案指定如何结帐到非空文件夹,谢谢. (13认同)
  • 实际上,当我只需要将已创建的项目推送到新创建的存储库时,这对我来说是最有用的答案.奖励! (9认同)
  • -t开关做什么?我收到一条中止消息,其中包含一系列未跟踪的文件,这些文件将被结帐覆盖?在这种情况下该怎么办?我不希望这些文件被覆盖? (4认同)
  • 这真的很有用,因为[git checkout]的文档中并未明确显示`switch -t` on(https://git-scm.com/book/en/v2/Git-Commands-Branching-and-Merging #git-checkout)。 (2认同)
  • 来自git的-t文档:-t, - track创建新分支时,设置"上游"配置.有关详细信息,请参阅git-branch(1)中的"--track". (2认同)
  • 这是最好的答案。 (2认同)

Cra*_*gen 83

基本的Git存储库克隆

您使用克隆存储库

git clone [url]
Run Code Online (Sandbox Code Playgroud)

例如,如果你想克隆名为open_framework的斯坦福大学Drupal Open Framework Git库,你可以这样做:

$ git clone git://github.com/SU-SWS/open_framework.git
Run Code Online (Sandbox Code Playgroud)

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

将存储库克隆到特定的本地文件夹

如果要将存储库克隆到名为open_framework之外的目录中,可以将其指定为下一个命令行选项:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme
Run Code Online (Sandbox Code Playgroud)

该命令与前一个命令的作用相同,但目标目录名为mynewtheme.

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


ken*_*orb 17

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

git -C /httpdocs clone git@github.com:whatever
Run Code Online (Sandbox Code Playgroud)

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

cd /httpdocs
git clone git@github.com:whatever .
Run Code Online (Sandbox Code Playgroud)

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

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


Pau*_*aul 13

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

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


Sel*_*ani 13

克隆:

git clone git@jittre.unfuddle.com:jittre/name.git
Run Code Online (Sandbox Code Playgroud)

克隆"特定分支":

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git
Run Code Online (Sandbox Code Playgroud)


Lui*_*uis 13

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

git clone https://github.com/example/example.git ./
Run Code Online (Sandbox Code Playgroud)

  • 致命的:目的地路径'.' 已存在且不是空目录. (8认同)

Sar*_*dra 13

要克隆到当前工作目录:

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

要克隆到另一个目录:

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

希望能帮助到你 :)


Nag*_*jun 11

用法

git clone <repository>
Run Code Online (Sandbox Code Playgroud)

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

git clone <repo> <directory>
Run Code Online (Sandbox Code Playgroud)

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

来源:建立存储库


小智 9

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

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


pro*_*sti 7

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

git clone repo-url [folder]

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

Gitclone还将pull从远程存储库编码到本地存储库。事实上,这是真的:

git clone repo-url  =  git init + git remote add origin repo-url + git pull
Run Code Online (Sandbox Code Playgroud)


riy*_* tk 6

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

git clone git@github.com:origin .
Run Code Online (Sandbox Code Playgroud)

这 ”。” 最后指定当前文件夹作为签出文件夹。


小智 5

这是我将如何做到的,但我已经为我做了一个别名。

$ cd ~Downloads/git; git clone https:git.foo/poo.git
Run Code Online (Sandbox Code Playgroud)

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

这是我为加快速度而创建的别名。我是为 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'
Run Code Online (Sandbox Code Playgroud)

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

# Git aliases
alias gc="cd ~/Downloads/git; git clone "
Run Code Online (Sandbox Code Playgroud)

(从这里开始,用我的名字替换你的名字。)

然后,为了让别名工作,它们(连同 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 "

####################################
Run Code Online (Sandbox Code Playgroud)

保存您的 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。请随意分叉并改进它们以满足您的需求。


Man*_*ana 5

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

git clone <git_repo_url> <your_custom_directory_name>
Run Code Online (Sandbox Code Playgroud)

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