git - 使用 GIT 对 Java 网站进行版本控制的最佳方法是什么

标签 git jakarta-ee tomcat github

我在我的 unix 中安装了一个 git 存储库,用于跟踪我们的 Java EE 网站的版本。

我目前遇到的问题不是 git 的使用,而是我应该使用它的方式,如下所述。

我在一个由 3 名开发人员组成的团队中工作,他们负责网站开发。

最初,当我在我们的服务器上安装 Git 时,我直接创建了一个包含实际工作文件的 webapps 目录的 repo,并遇到了以下问题。

1) 在将更改提交到 repo 时,我们中的一个人通常会执行 git add . 并将其提交到存储库,该存储库不仅会提交提交者更改的文件,还会提交其他开发人员的更改。

当我们遇到这个问题时,我们决定需要在同一台服务器的不同目录中为我们每个人创建单独的非裸存储库,这些目录将包含整个代码。我们遵循的基本工作结构如下所示:

enter image description here

如上图所示,我们创建了一个裸存储库,其中包含由网络应用程序推送的网站内容,在图像中是工作目录。

这里的基本工作流程是:

1) 为每个开发人员创建 n 个非裸存储库。

2) 从那个裸仓库中提取整个网站的工作文件

3) 对我们自己的仓库进行更改后推送到裸仓库

4) 配置了接收后 Hook 的裸仓库实际上会更新工作目录。

此设置工作正常,但我们面临很多问题,如下所示:

1) 每个开发人员在一个单独的目录中都有自己的内容,在将代码推送到裸仓库之前无法测试代码,这将更新工作目录-因为这些步骤即使是说一个 jsp 文件更改我最终进行 20 次提交,直到它开始正常工作而没有错误,因为我们让 tomcat 仅指向原始工作目录。

这成了这里最麻烦的问题。

此策略解决了之前存在的冲突问题,但在测试代码方面产生了更大的问题。

我们如何改进这种在项目中使用 GIT 似乎有益的场景。

任何人都可以提出任何改进方法。

最佳答案

也许像这样的策略可能奏效?我以前在一个小团队中使用过类似的策略,它对我们很有效:

  • 每个开发人员在进行任何更改之前创建一个分支。
  • 开发人员做一些工作并提交给他们的分支
  • 如果可能,开发人员针对他们自己的目录运行 tomcat(或码头,或其他)进行测试。 Maven 让这一切变得非常简单。
  • 在推送之前,开发人员根据 master 重新设置他们的分支
  • 开发人员将他们的分支推送到裸仓库
  • 然后你(或负责最终批准的人)将分支 merge 到 master 中。如果开发人员 rebase 正确,这应该是一个简单的快进 merge 。

更新了关于每个开发人员如何运行 webapp 的一些想法:

我可以想到几种方法来完成上面的第 3 个 Gist :

  • 使用单独安装的 tomcat。创建多个上下文,每个开发人员一个。

    例如,对于 developer1,在 tomcat_home/conf/catalina/localhost 下创建一个名为 dev1.xml 的上下文文件,内容类似于:

    ?xml version="1.0"encoding="UTF-8"?> Context path="/dev1"docBase="/home/developer1/wars/your-webapp-1.0.war"unpackWAR="false"/>

    (注意我删除了第一个 '<' 所以 xml 将出现在帖子中)

  • 使用 jetty 通过命令行运行 war,类似于:

    java -jar jetty-runner.jar your-webapp-1.0.war

  • 使用 ant 或 maven 等构建工具提供的机制来运行和测试网络应用程序。例如,在 Maven 中,您可以使用 jetty-plugin 通过 mvn jetty:run 运行 webapp,甚至可以将其配置为在每次构建项目时启动 web 服务器并运行测试。

关于git - 使用 GIT 对 Java 网站进行版本控制的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537627/

相关文章:

git - 将具有多个分支和标签的现有 git repo 导入 gerrit

jakarta-ee - 如何将war文件部署到cPanel中并删除项目名称?

Tomcat JNDI 领域日志记录

firefox - tomcat(apache-tomcat-6.0.32)的 CSRF 方法在 firefox 14.0.1 上无法正常工作

git - HEAD@{n} 在 git reflog 的输出中意味着什么?

获取第一个版本的 Git 工作流

gitolite post receive hook for specific bare repo

jakarta-ee - 为什么 Servlet 的 doGet() 方法将响应作为参数而不是返回值?

html - 无法在 Web 应用程序中加载静态内容(图像/JS)

文件上传到服务器的安全漏洞 - java ee - tomcat