ChatGPT解决这个技术问题 Extra ChatGPT

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

命令 git clone git@github.com:whatever 创建一个名为 whatever 的目录,其中包含一个 Git 存储库:

./
    whatever/
        .git

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

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

l
leonprou

选项 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
谁能解释一下这样做的好处??我今天有点密集。使用符号链接如何使服务器受益?
J
J Wynia

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

git clone git@github.com:whatever .

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


是的,所以你不想在克隆到这个文件夹之前在这个文件夹中运行“git init”。但是如果你这样做了,那么在克隆之前删除 .git 文件夹就可以了。
修复了我的答案中的空目录
无法在 nitrous.io 中工作?即使清空后,它说目录不是空的
@TejasManohar 确保您也删除了隐藏文件。
ls -a 将显示所有文件,包括隐藏文件。
P
Peter Mortensen

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

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”。
C
Craig Gjerdingen

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


这将自动在您当前的文件夹中创建一个文件夹并将文件放在那里。因此,您无需担心覆盖任何其他文件夹。
k
kenorb

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


j
jjmerelo

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

git clone <git_repo_url> <your_custom_directory_name>

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


A
Ahmed Ashour

克隆到当前工作目录:

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

克隆到另一个目录:

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

希望能帮助到你 :)


这也对我有用。不是文件夹路径开头的 ./
通过此方法进行克隆仍会创建 repo 自己的文件夹名称,而不是使用当前工作目录的名称。例如 /present-directory/link/ 而不是 /present-directory/
P
Peter Mortensen

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

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

致命的:目标路径“。”已经存在并且不是空目录。
P
Paul

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

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


P
Peter Mortensen

用法

git clone <repository>

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

git clone <repo> <directory>

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

来源:Setting up a repository


G
Geoffrey Hale

克隆:

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

克隆“特定分支”:

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

J
JJD

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

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


C
Community

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

git clone repo-url [文件夹]

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

Git clone 还将 pull 代码从远程存储库写入本地存储库。事实上这是真的:

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

P
Peter Mortensen

这是我的做法,但我已经为我做了一个别名。

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


R
Riyas TK

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

git clone git@github.com:origin .

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


A
Ankit Singh

如果您将 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/ 路径。


T
Tarik

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

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

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

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

<VirtualHost *:443>
    ServerName example.com

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

T
Tarit Ray
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 .

G
Gene Bo

关于原帖中的这一行:

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

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

这种方法如上所述,但没有分解成步骤。以下是对我有用的步骤:

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

您刚刚将文件复制到的现有文件夹现在已准备好与 git 交互。