Как несколько пользователей могут использовать ту же иерархию каталога для выполнения операций GIT? -- git поле с участием bash пол Связанный проблема

How can multiple users use the same directory hierarchy for doing git operations?


0
vote

проблема

русский

У меня есть .git / config файл, который имеет несколько пользователей, определенных как:

 <код> [user]     name=user1     email=user1@domain.com     name=user2     email=user2@domain.com     ...   

Это было создано путем выполнения:

 <код> git config --add user.name user1; git config --add user.email user1@domain.com git config --add user.name user2; git config --add user.email user2@domain.com   

Пользователи user1, user2, ... будут делать операции Git, но никогда не одновременно.

Я использую git_ssh, чтобы быть скриптом, который выбирает правильную информацию из файла ~ / .ssh / config:

 <код> ARGS=$(awk "/^Host/{flag=0}flag{printf "-o %s=%s ",$1,$2}/Host $GIT_USER_REPO/{flag=1}" ~/.ssh/config) exec /usr/bin/ssh $ARGS "$@"   

Эта часть работает нормально, если у меня есть только один пользователь.

Проблема в том, что я не знаю, как настроить [Удаленное «Происхождение»] , чтобы URL можно поддержать несколько пользователей. Мой существующий URL указывается как только одно:

 <код> [remote "origin"]     url = ssh://user1@repo.com:1234/the/path   

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

В худшем случае я считал, что скрипт, указанный $ git_ssh, может изменить файл .git / config и динамически обновлять URL. Я надеюсь, что есть более легкое решение. Это решение будет включать в себя скрипт:

  1. Начиная с текущего каталога, поиск вверх для каталога .git.
  2. из приведенных выше args, извлеките запись, которая пришла из файла .ssh / config - значение URL.
  3. Обновите .git / config для использования этого URL.
  4. Измените строку Exec / usr / bin / ssh для использования этого значения.

Обратите внимание, что с целью этого вопроса я не заинтересован в создании отдельных каталогов для каждого пользователя (делая GIT клон, затем другие операции Git). «Пользователи», которые будут работать в иерархии каталога, являются частью сценариев автоматизации на основе CRON, и их много. Наличие нескольких каталогов для этого будет запретительно с точки зрения времени и пространства. Я заинтересован только в том, чтобы знать, если я смогу использовать один каталог (с подкаталазами) и иметь несколько пользователей выполнять операции Git в предположении, что операции никогда не перекрывают. Спасибо!

Английский оригинал

I have a .git/config file that has multiple users defined as:

[user]     name=user1     email=user1@domain.com     name=user2     email=user2@domain.com     ... 

This was created by doing:

git config --add user.name user1; git config --add user.email user1@domain.com git config --add user.name user2; git config --add user.email user2@domain.com 

The users user1, user2, ... will be doing git operations, but never at the same time.

I am using GIT_SSH to be a script that selects the correct information from the ~/.ssh/config file:

ARGS=$(awk "/^Host/{flag=0}flag{printf "-o %s=%s ",$1,$2}/Host $GIT_USER_REPO/{flag=1}" ~/.ssh/config) exec /usr/bin/ssh $ARGS "$@" 

That part works just fine if I have just one user.

The problem is that I don't know how to configure the [remote "origin"] so that the url can support multiple users. My existing url is specified as just one thing:

[remote "origin"]     url = ssh://user1@repo.com:1234/the/path 

How can multiple users use the same directory for doing git operations?

In the worst case, I've considered that the script specified by $GIT_SSH might modify the .git/config file and update the url dynamically. I'm hoping there is an easier solution. This solution would involve the script doing:

  1. Starting from the current directory, search upwards for a .git directory.
  2. From the ARGS above, extract an entry that came from the .ssh/config file that is the url value.
  3. Update the .git/config to use this url.
  4. Change the exec /usr/bin/ssh line to use this value.

Please note that for the purpose of this question, I am not interested in creating separate directories for each user (doing a git clone, then other git operations). The "users" that will be operating on the directory hierarchy are part of cron-based automation scripts and there are many of them. Having multiple directories for this would be prohibitive in terms of time and space. I am only interested in knowing if I can use a single directory (with subdirectories) and have multiple users do git operations under the assumption that operations are never overlapping. Thanks!

</div
     
     
     

Список ответов

0
 
vote
vote
Лучший ответ
 

Я могу подтвердить, что то, что говорит @manzur, так и @ itan-Reisner, правда.

немного больше информации: Когда я смотрю на то, что такое базовая команда ssh, я вижу:

 <код> exec /usr/bin/ssh -o User=user1 -o IdentityFile=/path/to/ssh/key -o HostName=repo.com -o StrictHostKeyChecking=no -o UserKnownHostsFile=/path/to/knownhosts -p <port> repo.com git-receive-pack '/repo/path'   

Итак, я вижу, что пользователь явно указывается через поле user = User1, и не подразумевается неявно, привлечена к записи user1@repo.com, которая предшествует Git-Pack-Pack. На самом деле, с такой записью, толкание Git не удается.

мой файл .ssh / config / config состоит из:

 <код> Host user1-repo     User user1     IdentityFile /path/to/ssh/key     HostName repo.com     StrictHostKeyChecking no     UserKnownHostsFile /path/to/knownhosts   

Вы можете увидеть из моей оригинальной команды awk выше, насколько вышеприведенное включено в команду exec выше и как она, следовательно, явно указывает пользователь, что делает его ненужным, чтобы иметь удаленный URL указывать имя пользователя в URL.

.

Большое спасибо за указатель!

 

I can confirm that what both what @manzur and @etan-reisner says is true.

A little more info: when I look at what the underlying ssh command is, I see:

exec /usr/bin/ssh -o User=user1 -o IdentityFile=/path/to/ssh/key -o HostName=repo.com -o StrictHostKeyChecking=no -o UserKnownHostsFile=/path/to/knownhosts -p <port> repo.com git-receive-pack '/repo/path' 

So, I see that the user is being specified explicitly via the User=user1 field and not being implicitly picked up with a user1@repo.com entry that precedes the git-receive-pack. In fact, with such an entry, the git push fails.

My .ssh/config file consists of:

Host user1-repo     User user1     IdentityFile /path/to/ssh/key     HostName repo.com     StrictHostKeyChecking no     UserKnownHostsFile /path/to/knownhosts 

You can see from my original awk command above how the above gets incorporated into the exec command above and how it, therefore, explicitly specifies the User, making it unnecessary to have the remote url specify a username in the url.

Many thanks for the pointer!

</div
 
 

Связанный проблема

6  Unsync'd git репозиторий в dropbox  ( Unsyncd git repository in dropbox ) 
У меня есть репозиторий Git (и рабочий каталог), который хранится в моем dropbox, поэтому я могу двигаться вперед и назад между компьютерами без необходимости...

8  Откатываясь в старую редацию в Mercurial (например, сброс Git)  ( Rolling back to an old revision in mercurial like git reset ) 
Использование git, я могу выбросить ошибку или случайные коммита, используя команду, как <код> git reset --soft HEAD^ Что сбрасывает текущую ветку (напр...

1  Git: Как интегрировать выбранные файлы из другого репо на филиалы в основном репо?  ( Git how to integrate selected files from another repo into branches in main rep ) 
Вот настройка: У нас есть команда документации, которая работает в собственном хранилище Git. В основном репозитории продукта у нас есть мастер и бета-фил...

0  GitLab - не в состоянии нажать локальные ветви на удаленный  ( Gitlab not able to push local branches to remote ) 
У меня есть доступ для разработчика вправо для GitLab. Я не могу выполнять какую-либо «толкать» операцию для удаленного начала. Может ли создавать новую локал...

420  Как найти / Определить большие коммиты в истории Git?  ( How to find identify large commits in git history ) 
У меня есть 300 МБ Git Reppo. Общий размер моих текущих зарегистрированных файлов составляет 2 МБ, а общий размер остальной части REPO GIT составляет 298 МБ. ...

0  Git Merge или ребазу?  ( Git merge or rebase ) 
У меня есть проект, в котором мой главный ветвь опережает резервную ветку. Из-за некоторых вопросов в коде мы хотим использовать ветку резервного копирования ...

218  Попытка потянуть с ошибкой: не может открыть .git / fetch_head: разрешение запрещено  ( Trying to git pull with error cannot open git fetch head permission denied ) 
Помогите мне, пожалуйста, я пытаюсь запустить это в моем терминале: <код> asgard@asgard-A7N8X2-0:~/CollegePortal$ git pull error: cannot open .git/FETCH_HEA...

156  Git говорит, что удаленный REF не существует, когда я удаляю удаленную ветвь  ( Git says remote ref does not exist when i delete remote branch ) 
Я бежал <код> git branch -a <код> * master remotes/origin/test remotes/origin/master Я хочу удалить мою удаленную ветвь Я попробовал <код> git ...

1  GIT CLONE FAY INFO: разрешение запрещено (Publickey)  ( Git clone fail infopermission deniedpublickey ) 
Команда git клон git@github.com ********* не удалось с информацией: <код> Permission denied (publickey). fatal: Could not read from remote repository....

0  Digitalocean не обновляет должным образом  ( Digitalocean not updating properly ) 
У меня есть проект реагирования, который я загрузил в цифровой океан. У меня есть проблема, где я внес некоторые изменения в проект. Требуется ли Git Pull (см...

4  Чистый запуск SSHD HelpMSG 3534  ( Net start sshd helpmsg 3534 ) 
Я пытаюсь настроить git на коробке Windows и пока все, кажется, работает ... кроме этого: <Код> find_end6 Получает ошибку <код> find_end7 Когда я набрал...

102  Могу ли я удалить все локальные ветви, кроме текущего?  ( Can i delete all the local branches except the current one ) 
Я хочу удалить все ветви, которые получают перечисленные в выходе ... <код> $ git branch ... но держать текущую ветку, за один шаг . Это возможно? Если...

11  Почему "Git push helloworld + Master: Master" вместо просто "git push helvelorld"?  ( Why git push helloworld mastermaster instead of just git push helloworld ) 
Я пытался протолкнуть мою (первый в мире!) Git Reppo, как это изначально: <код> $ git push helloworld Но я получил эту спину: <код> To git-smichaels@f...

6  Зависимости сборки TeamCity Build и выбирая правильную ветвь  ( Teamcity build dependencies and choosing the correct branch ) 
У меня есть один проект с тремя конфигурациями сборки: Интеграция Развертывать dev Развертывание релиза Конфиги по сборке 2 и 3 зависят от 1 через с...

4  Сообщение об ошибке Xcode «Удаленный репозиторий отклонил коммиты» при нажатии на GitHub  ( Xcode error message the remote repository rejected commits when pushing to git ) 
У меня есть филиал названа разрабатывать что я натянул, добавил какой-то код, совершенный, потянул снова, и теперь пытаюсь нажать, но я получаю следующее со...

Связанный проблема

6  Unsync'd git репозиторий в dropbox 
8  Откатываясь в старую редацию в Mercurial (например, сброс Git) 
1  Git: Как интегрировать выбранные файлы из другого репо на филиалы в основном репо? 
0  GitLab - не в состоянии нажать локальные ветви на удаленный 
420  Как найти / Определить большие коммиты в истории Git? 
0  Git Merge или ребазу? 
218  Попытка потянуть с ошибкой: не может открыть .git / fetch_head: разрешение запрещено 
156  Git говорит, что удаленный REF не существует, когда я удаляю удаленную ветвь 
1  GIT CLONE FAY INFO: разрешение запрещено (Publickey) 
0  Digitalocean не обновляет должным образом 
4  Чистый запуск SSHD HelpMSG 3534 
102  Могу ли я удалить все локальные ветви, кроме текущего? 
11  Почему "Git push helloworld + Master: Master" вместо просто "git push helvelorld"? 
6  Зависимости сборки TeamCity Build и выбирая правильную ветвь 
4  Сообщение об ошибке Xcode «Удаленный репозиторий отклонил коммиты» при нажатии на GitHub