Re: Git, Как решаете вопрос с разграничением доступа?
От: Evgeny.Panasyuk Россия  
Дата: 11.08.18 11:42
Оценка: 25 (6) +2
Здравствуйте, CoderMonkey, Вы писали:

CM>Есть репозиторий с большим проектом. Нужно дать фрилансеру доступ к части этого проекта, которая находится в подкаталоге. Что-то я ищу и не вижу ни одного внятного способа это сделать.

CM>Это вообще возможно?

Ежели submodule не подходит, есть другие варианты:

Вариант 1, топорный:
отошлите ему текущее содержимое поддиректории с полным относительным путём к ней, он положит её в локальный независимый гит, и будет слать вам патчикоммиты через git format-patch, вы их будите накатывать через git am. Авторство и таймстампы при этом не теряются. Примерно подобным способом (format-patch/am) например разрабатывается ядро Linux.

Вариант 2, subtree:
используя subtree сделайте git subtree split/push на требуемую под-папку — у вас получится отдельный репозиторий файловый корень которого соответствует под директории, к нему можете дать доступ на чтение запись. Когда вам нужно будет накатить его изменения назад — делаете git subtree pull/merge.
  пример
[tmp]$ mkdir main bare sub
[tmp]$ git init --bare bare
Initialized empty Git repository in /tmp/tmp/bare/
[tmp]$ cd main
[main]$ git init .
Initialized empty Git repository in /tmp/tmp/main/.git/
[main]$ git config user.name main; git config user.email main
[main]$ echo secret > secret
[main]$ mkdir lib
[main]$ echo from main > lib/libfile
[main]$ git add .
[main]$ git commit -m initial
[master (root-commit) 1fadd18] initial
 2 files changed, 2 insertions(+)
 create mode 100644 lib/libfile
 create mode 100644 secret
[main]$ git subtree split --rejoin -P lib/ -b subbranch master
Merge made by the 'ours' strategy.
Created branch 'subbranch'
30707246d9fe28bd4ea0227823b1c2464198a7fb
[main]$ git push ../bare subbranch:master
Counting objects: 3, done.
Writing objects: 100% (3/3), 200 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../bare
 * [new branch]      subbranch -> master
[main]$ pushd ../sub
/tmp/tmp/sub /tmp/tmp/main
[sub]$ git clone ../bare .
Cloning into '.'...
done.
[sub]$ git config user.name sub; git config user.email sub
[sub]$ echo from sub >> libfile
[sub]$ cat libfile
from main
from sub
[sub]$ git commit -am "from sub"
[master d521e37] from sub
 1 file changed, 1 insertion(+)
[sub]$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 234 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /tmp/tmp/sub/../bare
   3070724..d521e37  master -> master
[sub]$ popd
/tmp/tmp/main
[main]$ git subtree pull -P lib/ ../bare  master
remote: Counting objects: 3, done.        
remote: Total 3 (delta 0), reused 0 (delta 0)        
Unpacking objects: 100% (3/3), done.
From ../bare
 * branch            master     -> FETCH_HEAD
error: Terminal is dumb, but EDITOR unset
Not committing merge; use 'git commit' to complete the merge.
[main]$ git commit -m merge
[master fbd74e8] merge
[main]$ git --no-pager log --stat
commit fbd74e87493650049eed0ff91be444c33a00be37
Merge: 638273f d521e37
Author: main <main>
Date:   Sun Aug 12 09:51:44 2018 +0800

    merge

commit d521e376da6c06af0b8b0048d06038591ba953de
Author: sub <sub>
Date:   Sun Aug 12 09:51:34 2018 +0800

    from sub

 libfile | 1 +
 1 file changed, 1 insertion(+)

commit 638273fb345cb5d924f50d86498d71db20f8cd1f
Merge: 1fadd18 3070724
Author: main <main>
Date:   Sun Aug 12 09:51:15 2018 +0800

    Split 'lib/' into commit '30707246d9fe28bd4ea0227823b1c2464198a7fb'
    
    git-subtree-dir: lib
    git-subtree-mainline: 1fadd1800d4323a1ee2afda317f1422d1ce88786
    git-subtree-split: 30707246d9fe28bd4ea0227823b1c2464198a7fb

commit 30707246d9fe28bd4ea0227823b1c2464198a7fb
Author: main <main>
Date:   Sun Aug 12 09:51:12 2018 +0800

    initial

 libfile | 1 +
 1 file changed, 1 insertion(+)

commit 1fadd1800d4323a1ee2afda317f1422d1ce88786
Author: main <main>
Date:   Sun Aug 12 09:51:12 2018 +0800

    initial

 lib/libfile | 1 +
 secret      | 1 +
 2 files changed, 2 insertions(+)
[main]$ cd ../bare
[bare]$ ls
branches  config  description  HEAD  hooks  info  objects  refs
[bare]$ cd objects/
[objects]$ find -type f | tr -d ./ | xargs -L1 -i bash -c 'echo contents of {} ---------------; git cat-file -p {}'
contents of d521e376da6c06af0b8b0048d06038591ba953de ---------------
tree fd300cd47abfb8776165b929faed376ea3205306
parent 30707246d9fe28bd4ea0227823b1c2464198a7fb
author sub <sub> 1534038694 +0800
committer sub <sub> 1534038694 +0800

from sub
contents of 26f343c083952217e74b016dda8c88e11cf5b394 ---------------
from main
contents of 30707246d9fe28bd4ea0227823b1c2464198a7fb ---------------
tree 7696b154e1692d288941d66c4cff126d57d847a6
author main <main> 1534038672 +0800
committer main <main> 1534038672 +0800

initial
contents of d2292eabd746fb92dd0f20f51d8fcced705ca5aa ---------------
from main
from sub
contents of 7696b154e1692d288941d66c4cff126d57d847a6 ---------------
100644 blob 26f343c083952217e74b016dda8c88e11cf5b394    libfile
contents of fd300cd47abfb8776165b929faed376ea3205306 ---------------
100644 blob d2292eabd746fb92dd0f20f51d8fcced705ca5aa    libfile
Отредактировано 12.08.2018 1:59 Evgeny.Panasyuk . Предыдущая версия . Еще …
Отредактировано 11.08.2018 13:48 Evgeny.Panasyuk . Предыдущая версия .
Re[8]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 11.08.18 14:31
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Если завтра эта либа начнет использоваться в нескольких продуктах, у вас уже не будет возражений против выделения.


А если завтра у бабушки вырастет борода...

W>Например, автоматизировать скриптами выгрузку нужного подкаталога в отдельный репозиторий. А также пуш из него в основной.


... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 11.08.18 14:31
Оценка:
Здравствуйте, Vain, Вы писали:

V>Я этот вопрос тут поднимал в споре с горсткой упоротых на хайпе гита. Как о стенку горох.


А где?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Git, Как решаете вопрос с разграничением доступа?
От: Vain Россия google.ru
Дата: 11.08.18 20:44
Оценка: 2 (1)
Здравствуйте, CoderMonkey, Вы писали:

V>>Я этот вопрос тут поднимал в споре с горсткой упоротых на хайпе гита. Как о стенку горох.

CM>А где?
Нашёл только это:
https://rsdn.org/forum/flame.comp/6833707
Автор: Gattaka
Дата: 09.07.17

https://rsdn.org/forum/tools/6800749
Автор: Vain
Дата: 04.06.17

https://rsdn.org/forum/job/6746927
Автор: HoseCo
Дата: 04.04.17


Но было что-то ещё, уже лень искать.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 11.08.18 22:44
Оценка:
Здравствуйте, Vain, Вы писали:

CM>>Есть репозиторий с большим проектом. Нужно дать фрилансеру доступ к части этого проекта, которая находится в подкаталоге. Что-то я ищу и не вижу ни одного внятного способа это сделать.

CM>>Это вообще возможно?
V>Я этот вопрос тут поднимал в споре с горсткой упоротых на хайпе гита. Как о стенку горох.
Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?
Sapienti sat!
Re[3]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 12.08.18 01:21
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?


К строительству информационного коммунизьма, будь готов!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 12.08.18 01:58
Оценка: :)
Здравствуйте, CoderMonkey, Вы писали:

C>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?

CM>К строительству информационного коммунизьма, будь готов!
У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так? Без всяких подписанных документов о неразглашении?
Sapienti sat!
Re[5]: Git, Как решаете вопрос с разграничением доступа?
От: Evgeny.Panasyuk Россия  
Дата: 12.08.18 02:04
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?

CM>>К строительству информационного коммунизьма, будь готов!
C>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так?

Над независимыми под-проектами/частями — почему бы и нет?

C>Без всяких подписанных документов о неразглашении?


Физическое разграничение доступа лучше бумажек жеж
Отредактировано 12.08.2018 2:05 Evgeny.Panasyuk . Предыдущая версия .
Re[6]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 12.08.18 09:39
Оценка: +1 -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

CM>>>К строительству информационного коммунизьма, будь готов!

C>>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так?
EP>Над независимыми под-проектами/частями — почему бы и нет?
Если они совсем независимые — то разделить их в отдельные репозитории.

C>>Без всяких подписанных документов о неразглашении?

EP>Физическое разграничение доступа лучше бумажек жеж
Ну да, создаём проблемы и героически решаем.

Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем. Секретные проекты есть, но они именно отдельные проекты, о которых остальные знают лишь кодовые названия. Ерундой типа "секретный чемодан каталог с секретными данными по учёту пирожков" никто не занимается.
Sapienti sat!
Re[3]: Git, Как решаете вопрос с разграничением доступа?
От: Vain Россия google.ru
Дата: 12.08.18 13:41
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?

По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Git, Как решаете вопрос с разграничением доступа?
От: Evgeny.Panasyuk Россия  
Дата: 12.08.18 13:42
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

CM>>>>К строительству информационного коммунизьма, будь готов!

C>>>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так?
EP>>Над независимыми под-проектами/частями — почему бы и нет?
C>Если они совсем независимые — то разделить их в отдельные репозитории.

Определи "не совсем независимые".

C>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем.


И что из этого? Натягивать сценарий Гугла и Амазона на любую контору разрабатывающую софт?
То что код открыт лишь означает что помимо кода есть много других активов, типа клиентуры, инфраструктуры и армии поддержки всего этого хозяйства.
В небольших и средних софтовых проектах весь код может быть ноу-хау и результат трудоёмких R&D, при утечки оного конкуренты могут сильно подняться
Re[4]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 12.08.18 14:59
Оценка:
Здравствуйте, Vain, Вы писали:

V>По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.


Вот ведь маразм. Надо просто заставлять всех юзеров соглашение о неразглашении подписывать!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 12.08.18 20:52
Оценка: -1 :)
Здравствуйте, Vain, Вы писали:

C>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?

V>По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.
Которые используются практически никогда.
Sapienti sat!
Re[8]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 12.08.18 20:53
Оценка: :))
Здравствуйте, Evgeny.Panasyuk, Вы писали:

C>>Если они совсем независимые — то разделить их в отдельные репозитории.

EP>Определи "не совсем независимые".
Не входят в один продукт.

C>>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем.

EP>И что из этого? Натягивать сценарий Гугла и Амазона на любую контору разрабатывающую софт?
EP>То что код открыт лишь означает что помимо кода есть много других активов, типа клиентуры, инфраструктуры и армии поддержки всего этого хозяйства.
И причём тут Git?

EP>В небольших и средних софтовых проектах весь код может быть ноу-хау и результат трудоёмких R&D, при утечки оного конкуренты могут сильно подняться

Я же говорю: "прятать и не пущать". Синдром советских НИИ ещё.
Sapienti sat!
Re[7]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 15.08.18 19:14
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем.


Прямо-таки весь? Не подскажешь, где найти коды гугл-сёрча?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[8]: Git, Как решаете вопрос с разграничением доступа?
От: Cyberax Марс  
Дата: 15.08.18 22:06
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

C>>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем.

CM>Прямо-таки весь? Не подскажешь, где найти коды гугл-сёрча?
Прямо весь, кроме некоторых секретных проектов. Гугл-сёрч — не секретный.

Могу подсказать, где в репозитории Амазона хранятся исходники Алексы
Sapienti sat!
Re[9]: Git, Как решаете вопрос с разграничением доступа?
От: CoderMonkey  
Дата: 15.08.18 22:09
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Прямо весь, кроме некоторых секретных проектов. Гугл-сёрч — не секретный.


И где же?

C>Могу подсказать, где в репозитории Амазона хранятся исходники Алексы


Кому она нафиг нужна?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Git, Как решаете вопрос с разграничением доступа?
От: Skorodum Россия  
Дата: 22.08.18 09:19
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Запись лучше пулреквестами регулировать. Не давать же возможность напрямую коммитить в мастер (или куда они там коммитят).

Не давать возможность пушить, коммиты же локальны.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.