web-dev-qa-db-ja.com

ベアGitリポジトリにmasterブランチを作成するにはどうすればよいですか?

(Windows 8のposhgitですべて行われます):

git init --bare test-repo.git
cd test-repo.git

(フォルダーは、git-ishのファイルとフォルダーを使用して作成されます)

git status

致命的:この操作は作業ツリーで実行する必要があります(わかりました。したがって、裸のレポではgit statusを使用できません。理にかなっています)

git branch

(何もありませんが、裸のリポジトリにはブランチが含まれていないようです。クローンリポジトリからブランチを追加する必要がありますか?)

cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git

(空のリポジトリのクローン作成に関する警告が表示されます)

cd test-repo

(プロンプトは、私がマスターブランチにいることを示すために変わります)

git branch

(結果が表示されない-え?)

git branch master

致命的:有効なオブジェクト名ではありません: 'master'

あのそれでは、ベアリポジトリにmasterブランチを作成するにはどうすればよいですか?

38
David

むき出しのリポジトリは、プッシュしてフェッチするだけのものです。直接「イン」することはできません。スタッフをチェックアウトしたり、参照(ブランチ、タグ)を作成したり、git statusなどを実行したりすることはできません。

ベアGitリポジトリに新しいブランチを作成する場合、クローンからベアリポジトリにブランチをプッシュできます。

# initialize your bare repo
$ git init --bare test-repo.git

# clone it and cd to the clone's root directory
$ git clone test-repo.git/ test-clone
Cloning into 'test-clone'...
warning: You appear to have cloned an empty repository.
done.
$ cd test-clone

# make an initial commit in the clone
$ touch README.md
$ git add . 
$ git commit -m "add README"
[master (root-commit) 65aab0e] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

# Push to Origin (i.e. your bare repo)
$ git Push Origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/jubobs/test-repo.git/
 * [new branch]      master -> master
55
jub0bs

ブランチは、コミットへの単なる参照です。リポジトリに何かをコミットするまで、ブランチはありません。これは、非ベアリポジトリでも確認できます。

$ mkdir repo
$ cd repo
$ git init
Initialized empty Git repository in /home/me/repo/.git/
$ git branch
$ touch foo
$ git add foo
$ git commit -m "new file"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ git branch
* master
11
chepner

2番目のリポジトリは必要ありません。 --work-treeオプションとcheckoutcommitなどのコマンドを使用してダミーのディレクトリを提供し、ベアリポジトリでも動作します。ダミーディレクトリを準備します。

$ rm -rf /tmp/empty_directory
$ mkdir  /tmp/empty_directory

そしてそこに行きます:

$ cd test-repo.git             # your fresh bare repository

$ git --work-tree=/tmp/empty_directory checkout --Orphan master
Switched to a new branch 'master'                  <--- abort if "master" already exists

$ git --work-tree=/tmp/empty_directory   commit --allow-empty -m "empty repo" 

$ git branch
* master

$ rmdir  /tmp/empty_directory

Vanilla git 1.9.1でテスト済み。 posh-gitが--allow-emptyをサポートしてファイルを変更せずにコミットする(メッセージのみのコミット)かどうかを確認しませんでした。

6
kubanczyk

デフォルトでは、ブランチはリストされず、ファイルが配置された後にのみポップアップします。心配する必要はありません。フォルダー構造の作成、ファイルの追加/削除、ファイルのコミット、サーバーへのプッシュ、ブランチの作成など、すべてのコマンドを実行するだけです。問題なくシームレスに動作します。

https://git-scm.com/docs

0
Shivraaz