これがシナリオです。私は「デスクトップ」と「ラップトップ」の2台のマシンを持っています。
デスクトップでは:
mkdir git_test
cd git_test
git init
dd if=/dev/urandom of=test.img bs=1k count=1000
git add test.img
git commit -m "Added first image"
それからラップトップで私はします:
git clone [USER]@desktop:/home/[USER]/git_test
cd git_test
dd if=/dev/urandom of=test2.img bs=1k count=1000
git add test2.img
git commit -m "Added second image"
次に、デスクトップのgitレポジトリをラップトップのgitレポジトリのように見せたいと思います。ラップトップで、私は以下を発行します:git push origin master
しかし、それから私は得る:
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
これら2つのリポジトリの同期を維持するにはどうすればよいですか?
エラーメッセージは、gitが私が望む機能を持っていることを示唆しているようですが、何らかの理由で、より高度なワークフローのようです。あなたが現在いるブランチにプッシュすることはできないと誰かが言ったのを聞いたことがありますが、誰かが可能な解決策としてそれについて詳しく説明できますか?その性質のソリューションには問題はありません。つまり、ラップトップの特定のブランチとデスクトップの別のブランチで作業し、それらを何らかの方法で同期して同一にすることができます。
次の点に注意してください!
いくつかの理由から、githubのような一元化されたリポジトリを使用したくありません。1つ目はセキュリティです。2つ目はシンプルさです。3つ目は、ここには立ち入らない状況のため、リモートサーバーへのインターネット接続を期待できず、2台のマシンをLAN経由で接続しているだけです。最後に、その特定の知識を得るために、ここで要求した方法で物事を行う方法を学びたいと思います。
また、裸のレポジトリにはルートディレクトリにたくさんのがらくたがあるので、裸のレポジトリは使いたくありません。これは醜くて厄介です。私がsubversionからgitに移行した理由は、gitがはるかにクリーンで分散型のソリューションのように見えたからです。また、デスクトップのルートディレクトリで操作する技術者以外の人もいますが、彼らは雑然とかなり混乱します。gitの美しさは(私が思ったように)すべてが.gitフォルダーに隠れていることです。編集:どうやら私はこの点で十分に明確ではありませんでした。mydata1とmydata2のサブフォルダーを持つ「Documents」フォルダーがあるとします。これは不自然な例ではありません。これはまさに私が対処しようとしている問題です。mydata1には、「test.img」とそのファイルのみが含まれている必要がありますが、代わりに次のファイルが含まれています。
ブランチ構成の説明HEADフック情報オブジェクト参照
mydata1にCDを挿入してファイルの編集を開始できるようにしたかったのですが、代わりに、ブランチなどをCDで処理して、作業を完了する必要があります。そして、「ドキュメント」にあったすべてのサブフォルダにこの種のディレクトリ構造を持たせることは、まったく機能しません。どうか、このようにするように言わないでください。質問に答えてください。ありがとう。
これらの2つのポイントが、私がこの質問をここに投稿する理由です。この質問に対する回答がある場合にのみ返信してください。:) ありがとう!!