ChatGPT解决这个技术问题 Extra ChatGPT

git中的pull和clone有什么区别?

做(在mkdir repocd repo之后)有什么区别:

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

git clone git://github.com/cmcculloh/repo.git

我的意思是,显然一个更短,但除此之外,他们基本上在做同样的事情吗?

git pull 是最没用的 Git 命令。每个人都在使用它,却不了解它的作用以及为什么多次使用它是错误的。
git pull 没用不是真的.. 只需阅读最佳答案.. 它会引入其他用户所做的更改。这是开始将现有本地更改与远程更改合并的唯一方法。如果您想合作工作,IMO 不妨开始使用 pull over clone。

e
ebneter

git clone 是您获取现有存储库的本地副本以进行处理的方式。对于给定的存储库,它通常只使用一次,除非您想拥有它的多个工作副本。 (或者想在弄乱你的本地副本后得到一个干净的副本......)

git pull(或 git fetch + git merge)是您使用来自远程存储库的新提交更新该本地副本的方式。如果您与其他人协作,这是您将经常运行的命令。

正如您的第一个示例所示,可以使用各种其他 git 命令模拟 git clone,但实际上 git pullgit clone 做“基本上相同的事情”(反之亦然) .


git clone 所做的具体是什么不是由涉及“git pull”的命令序列完成的?
@cmcculloh:没什么——你描述的序列有效地完成了“git clone”的工作。关键是“git pull”被用来做各种你在那里所做的事情之外的事情——更不用说“git pull”实际上正是“git fetch;git merge ”。 IOW,如果你真的想的话,你可以在没有克隆和拉动的情况下生活。此外,您可以从您克隆的存储库以外的存储库中提取。我喜欢将“克隆”视为“让我成为该 repo 的本地副本”,而“拉取”则视为“从某个指定的远程获取更新”。
git clone 需要 repo 级别的 git init 并在本地 repo 中创建一个额外的 repo 文件夹层。就我个人而言,我认为在 repo 级别不需要 .git 文件,也不需要额外的 repo 文件夹层。 IMO, git pull 是一种更优雅的方法来创建一个新的本地 repo。 git init 在项目文件夹中,不会创建额外的 repo 文件夹。这是基于我有限的技术经验。我可能错了。
J
Jyoti Prakash

用外行的语言,我们可以说:

克隆:获取远程存储库的工作副本。

拉:我正在处理这个问题,请给我一些其他人可能会更新的新更改。


我认为您的 Pull 定义也可以用于 Clone
你怎么能处理你没有克隆的东西?
我不明白你的意思?
@henrywright 希望,ebneter 的回答将解决您的问题
@F.Kam 'clone' 仅第一次用于获取存储库的新副本
u
user229044

它们基本相同,除了克隆会设置额外的远程跟踪分支,而不仅仅是主分支。查看 man page

将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用 git branch -r 可见),并创建并签出从克隆存储库的当前活动分支派生的初始分支。


git fetch --all 设置了额外的远程跟踪分支,所以基本上是一样的。
您可以将 --single-branchclone 一起使用。
E
Eje

git clone 表示您正在制作系统中存储库的副本。

git fork 表示您正在将存储库复制到您的 Github 帐户。

git pull 表示您正在获取最后修改的存储库。

git push 表示您在修改后返回存储库。

通俗地说:

git clone 正在下载,git pull 正在刷新。


B
Blue Clouds

克隆小姐:我得到一份新副本到本地。

拉先生:我在本地已经有了,我只是更新它。

克隆小姐:我可以做你做的事!你只是我的子集。

拉先生:同上!

克隆小姐:不,你不创造。这就是我所做的:

在本地计算机中创建空的裸存储库。填充远程跟踪分支(repo 中的所有分支都下载到本地计算机)运行不带参数的 git fetch

你只做#3,然后你合并(获取+合并),我不需要这样做。我的是新鲜的……女孩!

拉先生:聪明的裤子,没什么大不了的,我会先做一个“git init”!那我们也一样。

克隆小姐:不,亲爱的,你不需要一个“签出分支”……git checkout?谁来做?我!

拉先生:哦,对了.. 我需要一个已签出的本地分支机构才能采取行动。但是等等..你默认签出 master 分支。有人在master分支上工作吗?不!您正在提供一个可能从未使用过的功能!我让用户决定结帐的最佳分支,这就是我的滚动方式! 🤘

Git 创建者:拉住你的马,如果 --bare 或 --mirror 与 clone 或 init 一起使用,您的合并将不会发生。它仍然是只读的。对于您的克隆小姐,git checkout 可以替换为 git fetch <remote> <srcBranch>:<destBranch>,除非您想使用带有拉取功能的 -s <strategy>,而这在 fetch 中是缺失的。

克隆小姐:不知何故,我感觉自己已经是赢家了,但让我也放弃这个吧:我的命令适用于存储库中的所有分支。你是那个心胸开阔的拉先生吗?

Pull 先生:在从 repo 中获取所有分支名称(只是“名称”)时,我的思想很宽泛。因为我不喜欢获取不必要的分支。但是合并只会发生在当前签出的分支上。排他性就是名字!在您的情况下,您也只签出一个分支。

Git Creators:仅添加一项:如果需要,可以将 Miss Clone 限制为仅一个分支:git clone --single-branch --branch <branch name> <url>


被低估的答案。
享受对话风格!
E
Eje

克隆:将远程服务器存储库复制到本地计算机。

pull:获取其他已添加到本地计算机的新更改。

这就是区别。

克隆通常用于获取远程 repo 副本。

如果您在团队中工作,则拉取用于查看其他队友添加的代码。


R
Raman_1059

git clone 仅用于准确下载远程服务器存储库上当前正在运行的内容,并将其保存在放置该项目的计算机文件夹中。大多数情况下,它仅在我们第一次上传项目时使用。在那之后,拉是更好的选择。

git pull 基本上是一个(克隆(下载)+合并)操作,主要用于团队合作。换句话说,当您想要该项目的最近更改时,您可以拉取。


L
Linh

git clone <remote-url> <=>

创建一个新目录

git init // 初始化新仓库

git remote add origin // 添加远程

git fetch // 获取所有远程分支

git switch // 切换到默认分支

git pull <=>

获取所有远程分支

将当前本地分支与跟踪远程分支(不是另一个分支)合并(如果存在本地分支)

git pull <remote> <branch> <=>

获取远程分支

将当前本地分支与远程分支合并(如果存在本地分支)


S
Scott

嗯,当我拉动时看到远程分支“4.2”缺少什么,就像我在克隆时所做的那样?有些东西显然不一样。

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

对比

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

我也注意到了这一点,我怀疑随着时间的推移 git 默认值的变化是问题所在。我在 windows 上有 1.9.5.msysgit,在 mac 上有 2.3.2-applegit-55。
E
Eje

虽然 git fetch 命令将获取服务器上您还没有的所有更改,但它根本不会修改您的工作目录。它只会为您获取数据并让您自己合并。但是,有一个名为 git pull 的命令,在大多数情况下,它本质上是一个 git fetch,后面紧跟一个 git merge

阅读更多:https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。
M
Md Abrar

git clone URL ---> 完整的项目或存储库将作为单独的目录下载。而不仅仅是更改 git pull URL ---> fetch + merge --> 它只会获取已完成的更改而不是整个项目


A
Akshay Pathak 1001

克隆-:它将在您的本地计算机上创建您的远程存储库项目的完全相同的副本。

Pull-:假设两个或两个以上的人共享同一个存储库。 (假设另一个人的名字是 Syam)(存储库是您的项目在 Github 中存在的地方)因此,如果 Syam 在其本地的同一个项目中进行一些更改并将其推送到远程存储库,那么无论 Syam 所做的更改,这些更改都会不反映在你的地方。因此,要在本地反映这些新变化,您必须使用 git pull。总的来说,我们使用 git pull 来更新项目。

所以基本上我们只使用一次 git clone ,而我们多次使用 git pull 。