将Git添加到现有的PhpStorm项目子文件夹

5
我已经查看了一些信息,似乎找不到这个特定难题的答案(否则我就不会在这里询问了!),或者至少如果有答案,我也没有理解它。
我在PhpStorm中创建了一个项目,“Web服务器位于远程主机上,文件可通过FTP/SFTP/FTPS访问”,并且一直在对其进行更改而没有任何问题。该项目的结构如下:
\Project Root
    \
    \ Subfolder A
        \ Contents A
    \
    \ Site
        \ Site stuff
    \
    \ Subfolder B
        \ Contents B

现在,我这样做是因为虽然我正在处理的主要文件在Site中,但我偶尔需要调整其他子文件夹中的一些东西。
保存项目可以上传文件而没有问题。
我现在遇到的问题是,Site在服务器上使用Git进行版本控制。我可以登录服务器并在那里执行一些Git操作(尽管我对Git不太熟悉),但当我尝试拉取已提交到repo(即upstream)的一些更改时,会出现合并冲突。由于我刚接触这个,我宁愿不要尝试使用vimdiff通过命令行解决冲突。
有没有办法通过PhpStorm设置Git只针对该特定文件夹操作,从远程repo(托管在此项目的另一个服务器上)获取更改,在PhpStorm中合并和解决冲突,然后以这种方式上传文件,以便在服务器上该项目显示为与当前分支最新?
我考虑过通过SFTP从服务器获取.git目录,并将其放置在Site文件夹中,就像在那里一样,但我不确定那是否可行。我还认为PhpStorm不首先执行此操作有很好的理由。
编辑:为了澄清一下,Site是脏的。我不想在满意它们之前提交这些更改,但现在我仍然需要它们。我尝试了stash、pull,然后应用,但那时我遇到了合并冲突错误,并且我想在PhpStorm中解决这些冲突。

如果“Site”文件夹是唯一受版本控制的内容,那么Git只会管理这个文件夹。您不必担心其他文件/文件夹与您的版本控制系统进程混在一起。 - Tim Biegeleisen
@TimBiegeleisen,我不担心他们与VCS混淆,我只需要找到一种方法让PhpStorm识别Site实际上在服务器上是在VCS下,并知道拉取更改的存储库位置,以便我可以在PhpStorm本身中合并和解决冲突。如果有意义的话:P - Sera H
2个回答

5
好的,所以我决定冒险尝试忽略 PhpStorm 拒绝触碰 .git 文件夹。这是一个漫长的过程,但以下是我所做的:
  1. 打开项目
  2. 选择 VCS -> 启用版本控制集成
  3. 选择 Git 作为项目根目录的 VCS

这将在您的项目根目录中创建一个 .git 文件夹。由于我们不想让根目录处于 VCS 下,而是想要其中一个子文件夹,我们可以:

  1. 打开 Preferences
  2. 在左侧窗格中选择 Version Control
  3. 在右侧窗格中选择项目并单击编辑铅笔
  4. 在弹出的对话框中,编辑 Directory 条目以使用 Git 的子文件夹,并单击 OK
  5. 应用确定

这会在日志中引发错误,抱怨该目录“已注册为 Git 根目录,但未在那里找到 Git 存储库。” 这没关系,因为我们将自己添加它。

  1. 关闭 PhpStorm
  2. 打开您喜欢的 FTP 程序并从服务器中获取 .git
  3. 将其放在您之前选择的目录中(因此是 Project Root/Site 或其他什么)

您可以删除 PhpStorm 在项目根目录下创建的 .git 文件夹,因为我们不再需要它;它将使用我们刚刚复制的那个。

可能还有一些额外的设置要调整。我使用密钥访问 Git 存储库,因此您可能需要将授权密钥添加到存储库上的 git 用户。

您确实可以直接跳到第 6 步并直接添加目录。 我猜它做的是同样的事情。

但是,现在我可以使用 Git 管理项目,并通过 PhpStorm 而不是服务器上的命令行进行合并和其他操作! :D


你能解释一下“打开你最喜欢的FTP程序并从服务器获取.git”这句话吗?你是指从Github上获取吗? - Revious
@Revious,如果你正在使用GitHub,那么是的,你可以从GitHub下载.git文件夹。我认为最简单的方法可能是将GitHub repo克隆到另一个目录,然后手动将.git目录复制到所需位置(如上面的第11步)。希望这有所帮助! - Sera H

0

既然您已经隐藏了本地更改,那么您可以通过以下步骤将本地的Site与服务器同步:

  1. 当您执行git pull时退出合并冲突,使用git merge --abort
  2. 通过git reset --hard origin/master将本地版本保留为远程仓库。

当您准备使用本地更改时,可以使用git stash pop


我不想将其他文件夹添加到代码库中。其中一个是特定于项目的,另一个有自己的代码库。我只想对“Site”文件夹进行操作,通过从服务器上关联到它的代码库拉取和合并更改。 - Sera H
那么远程仓库除了 Site 文件夹之外还有其他文件夹,而你只需要从服务器上的 Site 文件夹拉取更改? - Marina Liu
远程存储库仅为“网站”。子文件夹不在存储库中,我也不希望它们存在于其中。我只是提到它们来说明并非整个项目都受版本控制,但它们仍然存在于 PhpStorm 项目中。 - Sera H
谢谢。这基本上是我尝试过的步骤,但仍然是通过命令行而不是附加到PhpStorm。不过我已经解决了(: - Sera H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接