5185

[code]

    git init --bare --shared　
    
[/code]

とやると、

[code]

    fatal: Out of memory? mmap failed: No such device
    
[/code]

と謎のエラーが出るんですが、ググっても原因がわからず、、、

以前、その CentOS 上のディレクトリにあった `.git` ファイルを消しても（`rm -rf .git`）、`git init` は出来ますが、
`git init --bare` をすると、また同じエラーが出てしまいます。

皆様の知恵を借りたいと思い、投稿させていただきました、  
すいませんがよろしくお願いします！！


CC BY-SA 3.0
2015-01-23T18:00:08.150
5174
2015-01-24T00:42:42.123
2015-01-23T22:34:57.463
4978
5828
question
git
Git で共有リポジトリを作ろうとすると `fatal: Out of memory?` エラー


おそらく、他のファイルやディレクトリが存在するディレクトリでコマンドを実行しているのだと思います。典型的には、Ruby on Rails などの
`config` **ディレクトリ** が存在すると、config という **ファイル** を作ることが出来ないため、そのようなエラーになります。

Bare repository
は管理情報だけを持つリポジトリですので、管理する対象のファイルをはそこに置くことができません。以下のいずれかを選択してください。

  * Bare repository は別のディレクトリに作成する (空ディレクトリで実行するか、`git init --bare --shared /path/to/repos/dir` して新規ディレクトリを作成する)
  * `\--bare` を付けずに init する (Bare repository とはしない = そのリポジトリに管理情報も格納する。)


CC BY-SA 3.0
2015-01-23T18:27:46.560
5176
2015-01-23T18:27:46.560
76
5174
answer


ソースコードが既に存在するようなディレクトリ内で `git init --bare` を実行することは良くない `git` コマンドの使われ方です。 既に
@yasu が挙げたように、`config` ディレクトリが既に存在していると、件のような実に気持ちの悪いエラーと共に、処理が止まります。

[code]

    $ mkdir git_share_test
    $ cd git_share_test/
    $ mkdir config
    $ git init --bare
    fatal: Out of memory? mmap failed: Invalid argument
    $ ls
    HEAD        config      hooks       refs
    branches    description info
    
[/code]

このエラーが示された時点で、共有レポジトリ用のファイルが生成されてしまっているので、一つ一つ消しましょう。(`config` 以外)

以下説明。

[`git init`](http://git-scm.com/docs/git-init) で生成されるのは、 **作業用レポジトリ**
(ローカルレポジトリ)です。そこには、「作業用のソースコードのコピー」に加えて `.git`
ディレクトリが置かれます。このレポジトリに存在しているファイルは、作業用ファイルのコピーとみなされています。

[`git init --bare`](http://git-scm.com/docs/git-init) で生成されるのは、 **ベアレポジトリ**
(共有レポジトリ)で、レポジトリの実体と言えます。そのディレクトリ以下には、作業用レポジトリからの push や clone
を受け付け、記録するデータベースとして管理用のファイルが置かれることになります。ソースファイルが直接置かれる場所ではありません。`\--shared`
オプションは主にパーミッションを変更するだけです。

_共有レポジトリのディレクトリ構造_ （ディレクトリ名に `.git` が付加されるのは慣習です。）

[code]

    /somewhere/my_bare_repository.git
        - HEAD
        - branches
        - config
        - description
        - hooks
        - info
        - objects
        - refs
    
[/code]

既に作業用のソースコードが存在し、それを共有レポジトリとしたい場合は、作業用レポジトリを作った後、 `git clone --bare SOURCE
TARGET.git` を使用し、別ディレクトリに共有レポジトリとして複製してください。以下に手順を示します。

[code]

    # 作業用レポジトリを作成
    $ mkdir git_my_work
    $ cd git_my_work/
    $ git init
    Initialized empty Git repository in ~/workspaces/git_my_work/.git/
    $ cd ..
    # 共有レポジトリを作成 (作業用レポジトリを複製)
    $ git clone --bare git_my_work git_my_shared.git
    Cloning into bare repository 'git_my_shared.git'...
    warning: You appear to have cloned an empty repository.
    done.
    $ cd git_my_shared.git/
    $ ls
    HEAD        config      hooks       objects
    branches    description info        refs
    # --shared オプションと同等の設定 (不必要)
    $ chmod -R g+w .
    $ git config core.sharedRepository group
    $ git config receive.denyNonFastForwards true
    
[/code]

補足ですが、理解の確認のために以下の流れを試し、リモートレポジトリの扱いの確認もすると良いでしょう。

[code]

    # 作業用レポジトリの remote に git_my_shared.git を追加
    $ git remote add origin ~/workspaces/git_my_shared.git
    $ git remote -v
    origin  ~/workspaces/git_my_shared.git (fetch)
    origin  ~/workspaces/git_my_shared.git (push)
    
    # 新しくファイルを作って push する
    $ touch NEW_DUMMY
    $ git add NEW_DUMMY; git commit -m "Duh."
    [master (root-commit) c6ad51f] Duh.
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 NEW_DUMMY
    $ git push origin master
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 217 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To ~/workspaces/git_my_shared.git
     * [new branch]      master -> master
    
    # 別の新しい作業用レポジトリに共有レポジトリを clone する
    $ cd ..
    $ git clone ~/workspaces/git_my_shared.git git_another_work
    Cloning into 'git_another_work'...
    done.
    $ cd git_another_work/
    $ ls
    NEW_DUMMY
    $ git remote -v
    origin  ~/workspaces/git_my_shared.git (fetch)
    origin  ~/workspaces/git_my_shared.git (push)
    
[/code]


CC BY-SA 3.0
2015-01-24T00:12:59.533
5185
2015-01-24T00:42:42.123
2015-01-24T00:42:42.123
4978
4978
5174
answer