2

この( Git を使用してオフラインおよびオンライン開発を処理するための最良の方法) の質問に続いて、試してみて、ペンドライブをリモートとして使用することにしました。しかし、変更をコミットできないため、何かが欠けている可能性があります。

ペンドライブのディレクトリに「arvores」というリポジトリがあり、github.com から複製しました。

これで、別のローカル ディレクトリができて、ペンドライブのディレクトリのクローンを作成しました。

$ git clone f:/pendrive/arvores
Cloning into 'arvores'...
done.`

次に、1 つのファイルを変更して、変更をプッシュおよびコミットできるかどうかをテストしましたが、このエラー メッセージが表示されます。

$ git add .htaccess

$ git commit
[master 40eeccf] teste
1 file changed, 9 deletions(-)

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
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'.
To f:/pendrive/arvores
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'f:/pendrive/arvores'    
4

2 に答える 2

3

Knittl が言ったように、問題は、ペンドライブのリポジトリが裸ではないことであり、非裸のリポジトリに変更をプッシュすることはできません (デフォルト)。

ペンドライブで、次を実行する必要があります。

git clone --bare github_repo

これにより、 github_repoがベア リポジトリにクローンされます。その後、通常どおりにそのリポジトリからクローンを作成してプッシュできます。


git がどのように機能するかを調査して学習する必要があります。特にベアリポジトリと非ベアリポジトリについて。

ベアリポジトリは空のリポジトリではありません。「作業ツリー」のないリポジトリです。実行するとgit clone repo(裸ではない)、作成されたフォルダーには、最後のコミットのファイル (つまり、作業ツリー) だけでなく、非表示の ".git" フォルダーも表示されます。そのフォルダーには、リポジトリ全体 (すべてのコミット、ブランチ、タグなど) が含まれています。実行するとgit clone --bare repo(ベア)、その ".git" フォルダーのみが取得されます (作業ツリーはありません)。

于 2013-10-14T13:39:59.833 に答える
1

私が見る限り、2 つのオプションがあります。

  1. github からベア リポジトリをペンドライブにクローンし、このリポジトリを通常どおり作業マシンにクローンします ( Bruno Novaや他の人が既に提案しているように)。

  2. 行ったようにレポをペンドライブに複製しますが作業マシンには複製しないでください。プラグインして、ペンドライブのディレクトリの作業ディレクトリを使用するだけです。

2 番目のオプションは、リンク先の質問で推奨されるワークフローです。

于 2013-10-14T14:12:04.453 に答える