

あるユーザーAが `git clone` したディレクトリをサーバに公開しています。  
レポジトリーは、Git organization にはいっています。  
ユーザBがOrganizationのOrganizarで、サーバのディレクトリを `git pull` して更新することはできますか？

[code]

    $ sudo git pull
    remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
    remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
    fatal: Authentication failed for 'https://github.com/user_a/stackoverflow.git/'
    
[/code]

と表示されました。  
エラーはパスワードが廃止になったのでその件ですが・・  
`uthentication failed for 'https://github.com/user_a/stackoverflow.git/'`  
でuser_aとなっていたのが気になりました。


CC BY-SA 4.0
2022-03-19T00:19:50.627
87907
2022-03-20T06:06:11.983
2022-03-19T04:17:16.433
3060
44839
question
git
git cloneしたディレクトリを複数ユーザで共有できますか？


"ローカルリポジトリを共有ディレクトリとして複数ユーザーで直接編集したい" ということであれば、不整合が発生する可能性があるので避けた方が無難です。

[ベアリポジトリとノンベアリポジトリ：理論編](https://www.nekotricolor.com/entry/theory-of-bare-and-
non-bare-repository-manage-wordpress-themes-with-git)

> Gitにはファイルロック機能がないそうなので、複数人で実ファイルのあるノンベアリポジトリにがしがしコミットすると不整合が起こります。

そもそもリモートリポジトリを使って既に共有はできているのだから、ユーザー毎に各々が管理するローカルリポジトリで作業するのが本来の使い方かと思います。


CC BY-SA 4.0
2022-03-19T04:22:33.387
87913
2022-03-19T04:22:33.387
3060
87907
answer


(他の方が書かれているように、現在の質問文からは意図を汲み取ることは不可能だと感じましたが、可能性のひとつとして)  
下図のような状況で、`ユーザB` が `updated.git` リポジトリの更新を `original.git`
リポジトリへ反映したいがどうすれば良いか、という質問だと理解しました。

[![配置図](https://i.stack.imgur.com/DBBni.png)](https://i.stack.imgur.com/DBBni.png)  
([plantuml](http://www.plantuml.com/plantuml/uml/NP4nJa9148RxFSLS00v0OT16xw263Ep0sy2R8VFc1IEXuBt6mif22sFiA2oCXJ4MtcOJpk6g9Anacp_xJUR__qo_CbIhovchfe7dg5X2WUmN6io8mRIc39N2CYfKIleZ3aSc2h7TnFOhDXydZiK8D4mA0nbde0UY4-HmZHQ41rSGrwyW2oPr8oddmiG6fy7Ewc4tVS3IZMNcIQ6kI0UuT1uDXrWHrFCaoNSdmPPkTM2OmTxU_JYvtOAagS0u-u4GcxiB7ejE4tg8wytsyNrx__QhdsFx4jkds7p6zYPfjzfbEQYGPSfNkrLwRjySEftp8dXFV7cKDNJ_b-
LJkywkJ-pJQRu1))

まず、ユーザBが管理権を持つ `original.git` を(`origin`という名前で)ローカルにcloneします:

[code]

    git clone git@github.com:organization_x/original.git
    cd forked
    
[/code]

次に、取り込みたいリポジトリ `updated.git` を `user_a` という名前で追加します:

[code]

    git remote add user_a git@github.com:user_a/updated.git
    
[/code]

`user_a` の最新情報を取得します:

[code]

    git fetch user_a
    # あるいは、 git fetch --all で全リポジトリの情報を取得
    
[/code]

`git branch -r` コマンドで
`user_a`リポジトリを含んだブランチ名が見られるので、後は単一リモートリポジトリを扱う時と同じように操作してください。  
例えば `user_a` の `master` ブランチを merge したいのなら次のような操作になります:

[code]

    # user_a/master というブランチ名は git branch -r コマンドで確認できる
    git merge user_a/master
    
[/code]

ここでのキーポイントは `git remote` コマンドで複数のリモートリポジトリを取り扱う点ですので、"git remote
add"といったフレーズでウェブ検索してみると理解が深まるかも知れません。

例えばGitHubのドキュメントだと、次に説明があります(残念ながらあまりわかり易くないので他を当たった方が良さそうですが):

  * <https://docs.github.com/ja/get-started/getting-started-with-git/managing-remote-repositories>


CC BY-SA 4.0
2022-03-20T05:57:13.837
87926
2022-03-20T06:06:11.983
2022-03-20T06:06:11.983
2808
2808
87907
answer