SSH Git-如何从repo中拉出文件夹,但不删除部署服务器上的其他目录和文件

时间:2021-03-01 作者:TARKUS

我正处于git教育的一个阶段,我已经完善了我的。gitignore文件,这样当我从本地开发机器推送到远程存储库(该存储库恰好位于Azure上,但也可能位于github上)时,repo中的文件夹和文件正是我想要的。即:

wp内容/插件/我的自定义插件。。。基本上就是这样。我不想在混合中使用wp config,也不想使用wp includes或wp admin等任何库存wp文件夹。无缓存、无wp内容/上载等。

输入我的问题:当我用SSH连接到我的网站所在的Linux web服务器时,我如何执行git pull origin dev 这样git就不会删除我的整个WordPress站点,而只将其替换为repo中的文件夹/文件?

What I\'ve Tried:首先,当我表演的时候git pull origin dev, 这个操作确实删除了我所有的WordPress文件,只留下拉式回购。至少可以说,这是不可接受的。

因为这是开发服务器,所以我可以随意使用它并将其弄错,因为我总是可以通过FTP将网站返回到服务器。FTP\'ing非常耗时,所以我不想多次出错。当需要在生产服务器上执行此操作时,我一次也不会出错。

我自己回答这个问题,因为出于某种原因,它吸引了其他与原始问题无关的评论和答案。我想你可以有很高的声誉,但阅读理解力仍然很低。

2 个回复
最合适的回答,由SO网友:TARKUS 整理而成

文字印刷机。stackexchange主持人在回答问题后是否关闭该问题?没有其他人看到自私自利的利益冲突?嗯。。。

汤姆·J·诺厄尔的评论和回答完全错误地陈述了这个问题,而他的报复性否决,然后回答问题,然后结束问题,应该有损于本网站主持人的尊严。这种行为无助于提高信誉。我想现在我在这个网站上发布或回复的任何其他问题都会受到惩罚。

另一个回答是由一个代表性比我高的用户发布的,虽然冗长,但实际上并没有解决我原来的问题。

要获得比给出的答案更好的答案,请参考此处标记为正确的答案:SSH git — How to pull a folder from repo, but not delete other directories & files on deployment server

因此,为了保持对实际问题的关注,我将回答我自己的问题。我认为这不是一个完美的答案,我希望有更好的答案。

What I\'ve Tried:首先,当我表演的时候git pull origin dev, 这个操作确实删除了我所有的WordPress文件,只留下拉式回购。至少可以说,这是不可接受的。

Repo包含wp content文件夹,只有wp content文件夹SSH到我的远程web文件夹根目录中

这就是问题所在。

解决方案(实际上,我目前的解决方案)是在我的webroot中创建一个temp文件夹,并将repo拉入temp文件夹,然后使用bash命令,如mv -u (仅移动更新的文件)或cp 将新的repo文件从临时文件夹移动或复制到工作文件夹。这将保留所有其他WP文件夹和文件。

Another answer:

<我创建了一个名为;“测试”;在web服务器上使用ssh和bash,Icp -r (已复制)将my remote的web文件夹中的所有WP复制到一个空的;“测试”;文件夹git pull origin dev --allow-unrelated-histories
SO网友:Tom J Nowell

输入我的问题:当我用SSH连接到我的网站所在的Linux web服务器时,我如何执行git pull-origin开发,以便git不会删除我的整个WordPress站点,而只将其替换为repo中的文件夹/文件?

git pull origin dev

git pull 不会擦除或替换未跟踪的文件。

例如,这里有一个git回购的示例README.md: https://github.com/KalobTaulien/example-repo

但是,任何存储库都可以,因此让我们执行以下操作:

将存储库克隆到文件夹中在该文件夹中创建未跟踪的文件运行git pull如果正确,则将删除未跟踪的文件。

结果如下:

~
❯ cd /tmp
/tmp 
❯ git clone https://github.com/KalobTaulien/example-repo
Cloning into \'example-repo\'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 18 (delta 1), reused 1 (delta 0), pack-reused 12
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (3/3), done.
/tmp 
❯ cd example-repo/
/tmp/example-repo ᚴ:master 
❯ touch test.txt
/tmp/example-repo ᚴ:master 
❯ ls
README.md test.txt
/tmp/example-repo ᚴ:master 
❯ git status
On branch master
Your branch is up to date with \'origin/master\'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    test.txt

nothing added to commit but untracked files present (use "git add" to track)
/tmp/example-repo ᚴ:master 
❯ git pull origin master
From https://github.com/KalobTaulien/example-repo
 * branch            master     -> FETCH_HEAD
Already up to date.
/tmp/example-repo ᚴ:master 
❯ ls
README.md test.txt
As you can see, test.txt was not erased.

总之,如何在不删除git未在同一文件夹中跟踪的文件和文件夹的情况下下拉文件?git pull. git pull 不擦除未跟踪的文件和文件夹git.

你的理论是git pull 责任不正确。

为什么

git pull 是这些命令的简写:

git fetch
git merge FETCH_HEAD
这些命令都不会触及未跟踪的文件。fetch 检索有关远程分支的信息。merge 将新提交应用于当前工作目录。

至于您的WordPress文件和文件夹被删除的原因,我们没有足够的信息来重现问题或诊断原因。能够看到git repo本身以及使用的所有命令,可能有助于诊断问题。

例如,在拉取之前,您的脚本可能会进行硬重置和清理。或者你没有做git pull 实际上,这是一种工具。git存储库也可能有在上运行的脚本挂钩pull 运行您没有告诉我们的其他命令。

然而,这不是WordPress的问题,而是git 问题您应该在堆栈溢出时询问此问题。