Реструктуризация репозиториев CVS и сохранение истории

#repository #cvs #history

#хранилище #резюме #история #репозиторий

Вопрос:

В настоящее время в нашем репозитории CVS есть следующее :

 Module1
  |
  |
   -----A
  |
   -----B
  

Мы хотим реструктурировать этот модуль таким образом, чтобы подкаталоги A и B отображались как модули высокого уровня. Что я мог бы сделать, это проверить Module1, а затем извлечь A и B, а затем сделать новый cvs add для A и B по отдельности, таким образом, сделав их новыми модулями cvs. Но я уверен, что если я сделаю это, я потеряю историю, а также мне пришлось бы удалить все внутренние папки CVS в разделах A и B.

Q1: Итак, есть ли способ реструктурировать это и сохранить историю?

По сути, я пытаюсь отфильтровать доступ между A и B. Итак —

Q2: Есть ли способ настроить безопасность так, чтобы определенные пользователи могли проверять только Module1 / A, а не Module1 / B ? и наоборот?

Комментарии:

1. ОК. Мне кажется, что если у меня есть права доступа к файловой системе, я мог бы просто зайти на сервер CVS, получить cvs root и переструктурировать каталоги. Каталоги, перемещенные прямо под cvsroot, будут доступны для проверки в качестве новых модулей. Кто-нибудь видит какую-либо проблему?

Ответ №1:

Q1: So is there a way to restructure this and retain the history?

Как вы написали в своем комментарии, если у вас есть системные привилегии, вы можете mv размещать модули в репозитории и сохранять историю всех файлов ниже A и B, но при этом вы теряете историю, которая / A раньше была Module1 / A, а / B раньше была в Module1 / B (не говоря уже о том, что скрипты сборки, вероятно, сейчас ломаются). Subversion решает эту проблему за вас, предлагая move команду (или переименовать), которая запоминает историю перемещения / переименования модуля.

Q2: Is there a way to set up security so that certain users can check out Module1/A only and not Module1/B ? and vice-versa?

Конечно, используются групповые разрешения. С этой страницы http://www.linux.ie/articles/tutorials/managingaccesswithcvs.php Вот фрагмент, на который я ссылаюсь, на случай, если эта страница когда-нибудь исчезнет

Каждому модулю свою группу

Ранее мы видели, как создание группы cvsusers помогло с координацией работы нескольких разработчиков. Мы можем расширить этот подход, разрешив ограничения на регистрацию на уровне каталога.

В нашем примере предположим, что модуль «cujo» должен быть r / w для Джека и Джона, а модуль «carrie» должен быть r / w для Джона и Джилл. Мы создадим две группы, g_cujo и g_carrie, и добавим в каждую соответствующих пользователей — в /etc/group мы добавим

 g_cujo:x:3200:john,jack
g_carrie:x:3201:john,jill> 
  

Теперь в репозитории (от имени root) запустите

 find $CVSROOT/cujo -exec chgrp g_cujo {} ;
find $CVSROOT/carrie -exec chgrp g_carrie {} ;
  

обеспечение, как и прежде, того, чтобы все
в каталогах установлен бит gid.

Теперь, если мы заглянем в репозиторий…

    john@bolsh:~/cvs$ ls -l 
   total 16
   drwxrwsr-x    3 john     cvsadmin     4096 Dec 28 19:42 CVSROOT
   drwxrwsr-x    2 john     g_carrie     4096 Dec 28 19:35 carrie
   drwxrwsr-x    2 john     g_cujo       4096 Dec 28 19:40 cujo
  

и если Джек попытается зафиксировать изменение
кэрри…

    jack@bolsh:~/carrie$ cvs update
   cvs server: Updating .
   M test
   jack@bolsh:~/carrie$ cvs commit -m "test"
   cvs commit: Examining .
   Checking in test;
   /home/john/cvs/carrie/test,v  <--  test
   new revision: 1.2; previous revision: 1.1
   cvs [server aborted]: could not open lock file
   `/home/john/cvs/carrie/,test,': Permission denied
   jack@bolsh:~/carrie$ 
  

Но в cujo проблем нет.

    jack@bolsh:~/cujo$ cvs update
   cvs server: Updating .
   M test
   jack@bolsh:~/cujo$ cvs commit -m "Updating test"
   cvs commit: Examining .
   Checking in test;
   /home/john/cvs/cujo/test,v  <--  test
   new revision: 1.2; previous revision: 1.1
   done
   jack@bolsh:~/cujo$ 
  

Процедура добавления пользователя теперь
немного сложнее, что это
может быть. Чтобы создать нового пользователя CVS, мы
нужно создать системного пользователя, добавить их
к группам, соответствующим
модули, в которые они могут записывать, и (если
вы используете метод pserver)
сгенерируйте для них пароль и добавьте
запись в CVSROOT/passwd.

Чтобы добавить проект, нам нужно создать группу, импортировать исходники, изменить группы для всех файлов в репозитории и убедиться, что бит set gid on execution установлен для всех каталогов внутри модуля, а также добавить соответствующих пользователей в группу.

Для всего этого, несомненно, требуется больше администрирования, чем когда мы тыкаем в людей заостренной палкой. В этом методе нам никогда не нужно добавлять системного пользователя или группу или изменять группы в каталогах — обо всем этом позаботятся, как только мы настроим репозиторий. Это означает, что непривилегированный пользователь может быть администратором CVS, даже не имея прав root на компьютере.

Комментарии:

1. 1 и принято! Спасибо, что подробно объяснили это