通过项目同步PHP文件

时间:2018-01-31 08:55:59

标签: php git svn version-control

我有一个带有此文件树的php服务器:

/common
    - functions.inc.php
    - ...
/website1
    /functions
        - functions.inc.php
/website2
    /functions
        - functions.inc.php

网站应单独发货,而不包含common文件夹,每个案例可能包含不需要的文件(jquery extensions,...)

我想通过所有common项目同步website*中的某些文件,例如,当我在common/functions.inc.php中更改某些内容时,所有website*/functions/中的文件都会被替换文件夹

我正在考虑使用bash脚本来执行此操作(手动或通过inotify),但我想知道是否有自动/手动本机或现有工具通过版本控制(git,svn, ...)以这种方式同步这些文件?

我想到的是使用版本号对角度依赖项或maven依赖项进行版本控制。

我目前正在使用外部svn(https://www.assembla.com/home),但如果git在这种情况下有更多选项,我可以考虑迁移。我的项目是在linux机器上(Raspberry pi或Lubuntu),但Windows方法可能很方便。

我完全拥有functions.inc.php文件,因此我可以在内部编写任何内容,例如版本号

2 个答案:

答案 0 :(得分:1)

是的,您可以使用 git pre-commit hook 自动将import sys ######Qt5 from PyQt4 import * from PyQt4.QtCore import * from PyQt4.QtGui import * ###matplotlib #import matplotlib #matplotlib.use('Qt5Agg') from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure from matplotlib.widgets import Cursor class Main_window(QWidget): def __init__(self): QWidget.__init__(self) self.initUI() def initUI(self): ### 1 we create the grid self.Global = QVBoxLayout(self) self.setLayout(self.Global) grid= QGridLayout() self.Global.addLayout(grid) ### a- space for plot self.tab = QTabWidget() self.figure = Figure() self.figure.subplots_adjust(hspace = 0, right=0.95, top=0.94, left=0.15) self.win = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.win, self.win) grid.addWidget(self.win,0, 0, 1, 3) grid.addWidget(self.toolbar, 1, 0, 1, 3) self.plot = self.figure.add_subplot(111) self.plot.legend() #### c- labels self.xlabl = QLineEdit('qwdwed') grid.addWidget(self.xlabl, 3, 1, 1, 1) self.xlabl.textChanged.connect(lambda : self.changelabl("x")) self.xlabl.setText('Xlabel') self.ylabl = QLineEdit('qwdwed') grid.addWidget(self.ylabl, 3, 2, 1, 1) self.ylabl.textChanged.connect(lambda : self.changelabl("y")) self.ylabl.setText('Ylabel') self.win.draw() self.show() def changelabl(self, which="y"): if which=="y": lab = self.plot.yaxis.label text = self.ylabl.text() else: lab = self.plot.xaxis.label text = self.xlabl.text() try: lab.set_text(text) lab._get_layout(self.figure.canvas.renderer) except: pass else: self.win.draw_idle() app = QApplication(sys.argv) main = Main_window() sys.exit(app.exec_()) 个p文件与common/functions.inc.ph个文件同步。

假设在website*/functions/functions.inc.php中管理文件树的所有文件,然后在每个提交挂钩的sheel脚本下面将检测master,如果更改,则在提交之前更新common/functions.inc.php file changes文件变化:

website*/functions/functions.inc.php

如果您要发送除#!/bin/sh # branch=$(git rev-parse --abbrev-ref HEAD) if [[ $branch == "master" ]]; then { echo "this is master branch" file="common/functions.inc.php" if [[ $(git diff --name-only HEAD) =~ $file ]]; then echo "changed the file" cp -fr common/functions.inc.php website1/functions cp -fr common/functions.inc.php website2/functions else echo "didn't change the file $(git diff --name-only HEAD)" fi } else echo "it's not on master branch" fi git add . 文件夹之外的代码,则可以创建新分支(例如commom),然后忽略release文件夹:

common

当您的代码被更改时(在网站*文件夹中),您可以更新发货分支以获取新货件:

git checkout -b release
rm -rf common
touch .gitignore
echo common >> '.gitignore'
git add .
git commit -m 'ignore common folder in release branch'

答案 1 :(得分:0)

您可以使用:

Git submodules

  • 使一个单独的git repo。
  • 然后将其声明为每个网站的子模块。

Composer

  • 使共同的单独的作曲家包(也是一个git repo)
  • 将其声明为每个网站的依赖项。

这意味着网站也必须由作曲家管理。