Как открыть репозиторий мерзавца, где различные пользователи могут только видеть определенные части?

Документация Perl идет с хорошим набором часто задаваемых вопросов. Ваш вопрос часто задают:

% perldoc -q duplicate

Ответ, копия и вставляемый от вывода команды выше, появляется ниже:

Found in /usr/local/lib/perl5/5.10.0/pods/perlfaq4.pod
 How can I remove duplicate elements from a list or array?
   (contributed by brian d foy)

   Use a hash. When you think the words "unique" or "duplicated", think
   "hash keys".

   If you don't care about the order of the elements, you could just
   create the hash then extract the keys. It's not important how you
   create that hash: just that you use "keys" to get the unique elements.

       my %hash   = map { $_, 1 } @array;
       # or a hash slice: @hash{ @array } = ();
       # or a foreach: $hash{$_} = 1 foreach ( @array );

       my @unique = keys %hash;

   If you want to use a module, try the "uniq" function from
   "List::MoreUtils". In list context it returns the unique elements,
   preserving their order in the list. In scalar context, it returns the
   number of unique elements.

       use List::MoreUtils qw(uniq);

       my @unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 1,2,3,4,5,6,7
       my $unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 7

   You can also go through each element and skip the ones you've seen
   before. Use a hash to keep track. The first time the loop sees an
   element, that element has no key in %Seen. The "next" statement creates
   the key and immediately uses its value, which is "undef", so the loop
   continues to the "push" and increments the value for that key. The next
   time the loop sees that same element, its key exists in the hash and
   the value for that key is true (since it's not 0 or "undef"), so the
   next skips that iteration and the loop goes to the next element.

       my @unique = ();
       my %seen   = ();

       foreach my $elem ( @array )
       {
         next if $seen{ $elem }++;
         push @unique, $elem;
       }

   You can write this more briefly using a grep, which does the same
   thing.

       my %seen = ();
       my @unique = grep { ! $seen{ $_ }++ } @array;
19
задан user513951 24 May 2018 в 17:22
поделиться

4 ответа

Собственный протокол git не поддерживает это; git во многих местах предполагает, что у каждого есть полная копия всей истории.

Тем не менее, одним из вариантов может быть использование git-subtree для отделения части репозитория в собственное репозиторий подмножества и периодического слияния обратно.

3
ответ дан 30 November 2019 в 04:44
поделиться

Git не поддерживает контроль доступа к репозиторию. Вы можете , однако, реализовать контроль доступа к репозиторию самостоятельно , используя хуки , а точнее хук update .

3
ответ дан 30 November 2019 в 04:44
поделиться

Вкратце: вы не можете . Git - это система управления версиями, основанная на снимках (по крайней мере, на концептуальном уровне), а не на наборах изменений. Он рассматривает проект (репозиторий) в целом . История - это история проекта, а не объединение историй одного файла (это больше, чем объединение историй каждого файла).

Использование таких хуков, как update-paranoid , в contrib, или VREFs механизм гитолита , вы можете разрешить или запретить доступ к репозиторию, вы можете разрешить или запретить доступ к отдельным ветвям. Вы даже можете запретить любые коммиты, которые изменяют вещи в указанном подкаталоге. Но проект всегда рассматривается как единое целое.

Что ж, есть одна вещь, которую вы можете сделать: создать каталог, доступ к которому вы хотите ограничить, в подмодуле ,

13
ответ дан 30 November 2019 в 04:44
поделиться

Йорг уже указал, что для этого можно использовать хуки. Какой именно крючок (и) вам нужен, зависит от ваших настроек. Если вам нужны разрешения для репо, которое будет отправлено, вам понадобится ловушка update , как он сказал. Однако если это ' s в репо, в котором вы фактически работаете (фиксация и слияние), вам также понадобятся хуки pre-commit и post-merge . В man-странице githooks (Йорг тоже связан с этим) отмечается, что на самом деле в разделе contrib есть сценарий, демонстрирующий способ сделать это. Вы можете получить его, взяв архив git или вытащив его из репозитория gitweb: setgitperms.perl . Даже если вы используете только ловушку обновления, это может быть полезной моделью.

Вы можете получить его, скачав архив git или вытащив его из репозитория gitweb: setgitperms.perl . Даже если вы используете только ловушку обновления, это может быть полезной моделью.

Вы можете получить его, взяв архив git или вытащив его из репозитория gitweb: setgitperms.perl . Даже если вы используете только ловушку обновления, это может быть полезной моделью.

2
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: