Wordpress 在SSH中使用Git拉取特定目录

Wordpress 在SSH中使用Git拉取特定目录,wordpress,git,ssh,Wordpress,Git,Ssh,完全是新手的问题,但在Git中使用SSH的最佳实践是什么?我在做一个WordPress项目。在根目录中,我有gulp和其他开发文件/文件夹,比如SASS和脚本,而在同一个项目中,我有我的WordPress文件夹,其中包含一个主题和一些自定义插件。正如您可以想象的那样,当主题或任何插件准备好部署时,我不想在服务器上提取存储库中的所有内容。对于一个新手来说,我总是拉和推整个存储库,并使用FTP将我需要的东西上传到服务器上,那么如何使用SSH和Git实现这一点呢?有没有更好的方法进行设置 编辑:为了让

完全是新手的问题,但在Git中使用SSH的最佳实践是什么?我在做一个WordPress项目。在根目录中,我有gulp和其他开发文件/文件夹,比如SASS和脚本,而在同一个项目中,我有我的WordPress文件夹,其中包含一个主题和一些自定义插件。正如您可以想象的那样,当主题或任何插件准备好部署时,我不想在服务器上提取存储库中的所有内容。对于一个新手来说,我总是拉和推整个存储库,并使用FTP将我需要的东西上传到服务器上,那么如何使用SSH和Git实现这一点呢?有没有更好的方法进行设置

编辑:为了让我的问题更清楚一点,让我举一个我认为我的问题是什么的例子。在我的主项目文件夹中,我的WordPress文件夹旁边有一个SASS文件夹。我真正需要部署到服务器的就是WordPress文件夹。我的构建过程发生在我的dev机器上,它将所有的SASS文件合并成一个CSS,然后放入WordPress文件夹中。我需要Git跟踪SASS文件夹,这样其他任何开发人员都可以提取它们并继续开发,所以我不能让Git忽略它。但是,这些SASS文件都不需要在服务器上,WordPress也可以正常工作。我只需要部署WordPress文件夹和其中的所有内容


我理解在服务器上创建一个裸存储库并使用post接收钩子将位于web根目录外的git文件夹指向web根目录所在位置的想法。但这基本上就是GIT和SSH的工作方式,这并没有回答我的问题

那么,根据你的问题和评论,涉及到三台计算机。有一个web服务器(当你说“服务器”时,我把它当作本场景中的web服务器,或者运行web服务器程序的服务器计算机)。您的git repo托管在另一台服务器上。这是你的开发工作站。这是正确的吗

看起来,您的Web服务器上有一个克隆的git repo。您当前的做法/工作流程似乎是(1)(基于您的表达“SSH’ed to my server”),您可以从工作站通过SSH(就像Telnet)登录web服务器(SSH只是一种协议,可以用于不同的目的)。(2) 您可以从托管服务(例如github)上的repo中提取,并(3)将其部署到同一服务器上的“www”目录中。这是正确的吗

(根据您对“FTP”一词的使用,我可以想出一个替代方案,但现在让我们重点关注上述方案。)

现在,你的问题是,每当你“拉”(在你的Web服务器上)的时候,你就会觉得你在从你的托管服务上的回购中拉所有东西。还有,还有更好的办法吗?我对你的问题理解正确吗

如果是这样的话,正如另一位评论者所建议的,git(以及一般的任何版本控制系统)非常擅长只获取“增量”。如果您担心每次拉动(上面的步骤(2))时“获取所有内容”,那么您的担心是没有根据的

现在的问题是,如果确实如此,为什么Web服务器上有git回购协议?这是一个非常合法的设置,我以前也做过(例如,在EC2上)。但是,作为最佳实践,人们通常不会在“生产”服务器上这样做。这是因为你必须“构建”你的web应用程序,而你真的不想在生产服务器上这样做

下一个问题是,你在第(3)步中到底做了什么?构建过程(无论您使用什么过程)通常会生成一个“输出”,可以直接部署到web服务器。(惯例是输出通常是一个文件夹,“public”、“www”、“dist”或任何东西,或一个文件(例如tar.gz、zip、jar、war)等)。无论您是在开发人员工作站(或构建机器)上还是在Web服务器上构建可部署输出,在这种情况下通常都不会进行“增量”操作。即使只更改了一个文件(例如CSS文件),通常也会重新构建整个输出(而不是仅替换更改后的CSS文件)。当您使用FTP上传文件等时,您可以有选择地上传某些文件和/或目录等,但一般情况下,我们不会这样做。我们总是从头开始构建完整的输出并将其部署到Web服务器。(这主要是为了减少潜在的部署错误并提高可靠性。)

因此,为了回答您的问题,(A)如果您在Web服务器上使用git repo,您应该真正改变这种做法,并将构建过程移动到您的开发人员计算机或专用构建机器上。(BTW,像GITHUB,GITLAB,TFS,……为您提供构建服务)。(b)如果您当前有选择地将Web应用程序文件FTP传送到Web服务器,那么您应该真正考虑采用某种形式的构建和部署,进程向前推进。 Git并不是专门设计用来提取特定文件或目录的。它是一个有向无环图,以二进制blob为对象,有时多个对象被压缩成一个较大的对象

由于Git设计,您的特定请求是不可能的

选择 柱接钩 如果您的网站只包含简单的静态文件,那么可以通过SSH推送到git存储库。实际上,只要您没有非文本文件,您的存储库就不可能很大

以下面的设置为例

  • /var/lib/www
    -apacheweb dir,它是
    www.git
  • /var/lib/www.git
    ——一个简单的git存储库
  • /var/lib/www.git/hooks/post receive
    -服务器端git钩子。它可以是一个shell脚本,用于在更新存储库时提取
    www
    存储库
示例
post receive
hook脚本:

#!/bin/bash
cd /home/sam/sandbox/git-hooks/www
unset GIT_DIR
git fetch origin master
git reset --hard origin/master
在tar.gz中压缩构建 在
I am working in a project and using git ssh with bitbucket following is the process i am using it may work for you also if not please correct me :

Step 1 ->I have setup git and create repo in bit-bucket.
Step 2 ->And setup project with my local and linked with my repo.
Step 3 ->connect my server using ssh.
Step 4 ->Work in my local and commit and push all changes in my git repo.
Step 5 ->Run git pull on ssh so all changes deployed in my server.

I am using above process and i love this process.i have used .gitignore  file that is not required for push on my repo.

Thanks