Куда делся мой файл? - PullRequest
       17

Куда делся мой файл?

0 голосов
/ 08 августа 2009

Я пытаюсь научиться использовать Subversion. На моем сервере Mac OS X у меня есть:

~ / public_html (много файлов)

У меня также есть / var / svn / myproject (это каталог svn, в котором я использовал svnadmin ~ / public_html / var / svn / myproject)

На моем MacBook Pro я использовал svn checkout svn checkout svn: // myserver / mysvnpath

Проверяет файлы.

Я редактирую файл и вставляю что-то простое.

Я фиксирую, и он не выдает ошибку и говорит, что я нахожусь на 2-й редакции.

Мой вопрос:

Когда я зафиксировал обновленный файл, куда он делся на сервере? Я никогда не видел, чтобы это изменилось в ~ / public_html.

Где мой обновленный файл на сервере? Я посмотрел в файлах ревизий, и я вижу, что 2 в оборотах есть мое изменение (это просто добавление одной строки, phpinfo ();).

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: на основе комментариев, я вижу, я действительно не понимаю.

РЕДАКТИРОВАТЬ: я пытался обновить SVN в ~ / public_html, но мой файл index.php никогда не изменяется. Интересно, что у меня есть другая машина, на которой я проверил код, и он показывает новую версию (2). Я просто не могу вернуть его обратно в ~ / public_html. Если мне нужно вручную скопировать его обратно в ~ / public_html, то как я могу быть уверен, что используется самая последняя версия? Что хорошего в этом хранилище? Я знаю, что он отслеживает изменения, но я хочу выпустить последнюю версию, если я обновлю свой веб-каталог на сервере.

Ответы [ 5 ]

2 голосов
/ 08 августа 2009

Я думаю, что эта запись SVN FAQ поможет вам: " Я управляю веб-сайтом в моем хранилище. Как я могу сделать так, чтобы живой сайт автоматически обновлялся после каждой фиксации? ":

Это делается все время и легко достигается путем добавления скрипт пост-фиксации хука к вашему репозиторий. Читайте о скриптах хуков в Глава 5 книги. Основная идея это сделать "живой сайт" просто обычная рабочая копия, а потом есть ваш скрипт перехвата пост-фиксации run 'svn обновить 'на нем.

На практике есть пара вещи, которые нужно остерегаться Сервер программа, выполняющая фиксацию (svnserve или apache) - это то же самое программа, которая будет работать скрипт перехвата пост-фиксации. Это означает что эта программа должна иметь надлежащее разрешения на обновление рабочих копия. Другими словами, рабочая копия должен принадлежать тому же пользователю, который svnserve или apache работает как - или на минимум рабочая копия должна иметь соответствующие разрешения установлены.

Если серверу необходимо обновить рабочая копия, которой он не владеет (для Например, пользователь joe's ~ / public_html / область), один из методов - создать + s бинарная программа для запуска обновления, поскольку Unix не позволяет запускать скрипты + З. Скомпилируйте крошечную программу на C:

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h> 
int main(void) 
{
   execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
         (const char *) NULL);  
   return(EXIT_FAILURE);
}

... а затем chmod + s двоичный файл и убедитесь, что он принадлежит пользователю 'joe'. Затем в хуке post-commit добавьте строка для запуска двоичного файла.

Если у вас проблемы с получением крючка на работу, см. «Почему нет моего хранилища крючки работают? ".

Кроме того, вы, вероятно, захотите предотвратить apache от экспорта .svn / каталоги в живой рабочей копии. Добавьте это к вашему httpd.conf:

# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
Order deny,allow
Deny from all 


Альтернатива: вы можете использовать импорт на месте. Посмотрите здесь как это сделать.

1 голос
/ 08 августа 2009

Та же путаница, которую я видел совсем немного.

Ваш SVN (если это сервер SVN) (/var/svn/myproject) и ваш веб-сервер (~/public_html) полностью разделены и не имеют никакого отношения друг к другу. Вам нужно будет сохранить / загрузить файл в папку ~ / public_html, а также зафиксировать SVN (сервер). Одним из них является веб-сервер, а другим является SVN (сервер).

Общий процесс, который я использую при работе:

  1. Извлечение хранилища в локальную папку (не в каталог веб-сервера, потому что вы не хотите, чтобы люди имели доступ к папкам .svn).
  2. Редактировать необходимые файлы.
  3. Загрузите, сохраните или скопируйте файл из рабочего каталога на веб-сервер. Проверьте, чтобы он работал. (Некоторые редакторы, такие как Dreamweaver или PhpEd, могут сохранять как рабочий каталог, так и каталог веб-сервера (FTP или другой) в одной комбинации клавиш.)
  4. Как только вы согласитесь с изменениями, используйте процесс фиксации SVN, чтобы внести изменения в SVN.

Повторяйте каждый раз, когда вы вносите набор изменений, за исключением проверки, вы захотите сделать обновление, если вы вносите изменения где-либо еще, или кто-то другой сделал. (Я делаю этот процесс каждый раз, когда я работаю над определенным набором изменений или ошибкой для сайта, чтобы я мог отслеживать историю того, что я сделал для каждого изменения.)

SVN (сервер) предназначен только для отслеживания изменений. Он часто работает как модуль веб-сервера, но не имеет ничего общего с вашим настоящим веб-сервером.

Если вас смущает то, как это работает, я бы порекомендовал приобрести услугу SVN, чтобы вы не запутались, и они будут заниматься настройкой SVN и связанными с ней проблемами.

Редактировать Если вы хотите, чтобы он автоматически публиковал вашу никогда не версию на веб-сервере (не рекомендуется), то вам нужно будет создавать скрипт для обновления каждые 15 минут или около того. Это действительно плохо, потому что ваши папки .svn окажутся в каталоге веб-сервера. Вам нужно делать это вручную каждый раз, когда вы вносите изменения или экспортируете svn в этот каталог.

0 голосов
/ 09 августа 2009

Здесь вы пытаетесь решить 2 процесса:

  1. Как управлять разными людьми, работающими над одним и тем же исходным кодом. Для этого вы настроили сервер Subversion; разработчики проверяют код на своей локальной машине и фиксируют в нем свои изменения.

  2. Развертывание ваших изменений на живом сайте. Есть несколько способов сделать это, в зависимости от таких факторов, как уровень обеспечения качества, который вам необходим в системе, скорость, с которой должны быть внедрены изменения, ... В любом случае, рекомендуется создать правильную процедуру для развертывания. Это можно сделать, превратив каталог public_html вашего веб-сервера в рабочую копию и запустив там svn update (вручную, по расписанию или с помощью ловушки после фиксации). Однако я бы потратил немного больше времени на реальный сценарий развертывания (используя msbuild, nant, просто файл .bat, в зависимости от того, что вам подходит), который экспортирует источники (используя 'svn export') и размещает их в нужном месте.

0 голосов
/ 08 августа 2009

Файлы Rev 2 будут обновлены в / var / svn / myproject. Чтобы изменения также были отражены в ~ / public_html, вам нужно будет выполнить обновление SVN для этого каталога, так как оно не делает этого автоматически и будет по-прежнему в версии 1, по крайней мере, до тех пор, пока вы не обновите его. Вы можете автоматизировать этот процесс с помощью cronjob, и я считаю, что есть способ определить, когда происходит новый коммит SVN, но я не знаю, если / что это такое.

0 голосов
/ 08 августа 2009

Вам также необходимо запустить svn update для ~ / public_html.

Я считаю, что ~ / public_html находится в редакции 1, а ваш macbook - в редакции 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...