Здравствуйте, 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
Здравствуйте, wildwind, Вы писали:
W>Если завтра эта либа начнет использоваться в нескольких продуктах, у вас уже не будет возражений против выделения.
А если завтра у бабушки вырастет борода...
W>Например, автоматизировать скриптами выгрузку нужного подкаталога в отдельный репозиторий. А также пуш из него в основной.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, CoderMonkey, Вы писали:
V>>Я этот вопрос тут поднимал в споре с горсткой упоротых на хайпе гита. Как о стенку горох. CM>А где?
Нашёл только это: https://rsdn.org/forum/flame.comp/6833707
Здравствуйте, Vain, Вы писали:
CM>>Есть репозиторий с большим проектом. Нужно дать фрилансеру доступ к части этого проекта, которая находится в подкаталоге. Что-то я ищу и не вижу ни одного внятного способа это сделать. CM>>Это вообще возможно? V>Я этот вопрос тут поднимал в споре с горсткой упоротых на хайпе гита. Как о стенку горох.
Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?
Sapienti sat!
Re[3]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Cyberax, Вы писали:
C>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?
К строительству информационного коммунизьма, будь готов!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, CoderMonkey, Вы писали:
C>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем? CM>К строительству информационного коммунизьма, будь готов!
У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так? Без всяких подписанных документов о неразглашении?
Sapienti sat!
Re[5]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Cyberax, Вы писали:
C>>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем? CM>>К строительству информационного коммунизьма, будь готов! C>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так?
Над независимыми под-проектами/частями — почему бы и нет?
C>Без всяких подписанных документов о неразглашении?
Физическое разграничение доступа лучше бумажек жеж
Здравствуйте, Evgeny.Panasyuk, Вы писали:
CM>>>К строительству информационного коммунизьма, будь готов! C>>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так? EP>Над независимыми под-проектами/частями — почему бы и нет?
Если они совсем независимые — то разделить их в отдельные репозитории.
C>>Без всяких подписанных документов о неразглашении? EP>Физическое разграничение доступа лучше бумажек жеж
Ну да, создаём проблемы и героически решаем.
Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем. Секретные проекты есть, но они именно отдельные проекты, о которых остальные знают лишь кодовые названия. Ерундой типа "секретный чемодан каталог с секретными данными по учёту пирожков" никто не занимается.
Sapienti sat!
Re[3]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Cyberax, Вы писали:
C>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем?
По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Cyberax, Вы писали:
CM>>>>К строительству информационного коммунизьма, будь готов! C>>>У вас над СложнымиПроектами(tm)(r)(c) работают люди с улицы, просто так? EP>>Над независимыми под-проектами/частями — почему бы и нет? C>Если они совсем независимые — то разделить их в отдельные репозитории.
Определи "не совсем независимые".
C>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем.
И что из этого? Натягивать сценарий Гугла и Амазона на любую контору разрабатывающую софт?
То что код открыт лишь означает что помимо кода есть много других активов, типа клиентуры, инфраструктуры и армии поддержки всего этого хозяйства.
В небольших и средних софтовых проектах весь код может быть ноу-хау и результат трудоёмких R&D, при утечки оного конкуренты могут сильно подняться
Re[4]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Vain, Вы писали:
V>По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.
Вот ведь маразм. Надо просто заставлять всех юзеров соглашение о неразглашении подписывать!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Vain, Вы писали:
C>>Лично я не понимаю на кой это "Не пущать никого!" нужно внутри проекта. Ограничивать запись — это понятно. Но чтение-то зачем? V>По той же причине по которой в обычной файловой системе существуют разграничения per-file/per-directory без всяких шаманств с блокчейном.
Которые используются практически никогда.
Sapienti sat!
Re[8]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
C>>Если они совсем независимые — то разделить их в отдельные репозитории. EP>Определи "не совсем независимые".
Не входят в один продукт.
C>>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем. EP>И что из этого? Натягивать сценарий Гугла и Амазона на любую контору разрабатывающую софт? EP>То что код открыт лишь означает что помимо кода есть много других активов, типа клиентуры, инфраструктуры и армии поддержки всего этого хозяйства.
И причём тут Git?
EP>В небольших и средних софтовых проектах весь код может быть ноу-хау и результат трудоёмких R&D, при утечки оного конкуренты могут сильно подняться
Я же говорю: "прятать и не пущать". Синдром советских НИИ ещё.
Sapienti sat!
Re[7]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, CoderMonkey, Вы писали:
C>>Для заметки — в Гугле и Амазоне практически весь исходный код доступен всем. CM>Прямо-таки весь? Не подскажешь, где найти коды гугл-сёрча?
Прямо весь, кроме некоторых секретных проектов. Гугл-сёрч — не секретный.
Могу подсказать, где в репозитории Амазона хранятся исходники Алексы
Sapienti sat!
Re[9]: Git, Как решаете вопрос с разграничением доступа?
Здравствуйте, GarryIV, Вы писали:
GIV>Запись лучше пулреквестами регулировать. Не давать же возможность напрямую коммитить в мастер (или куда они там коммитят).
Не давать возможность пушить, коммиты же локальны.