24

正確には何git initのためですか?コンピューターごとに1回、またはgitを使用するプロジェクトごとに1回実行する必要がありますか?でプロジェクトをダウンロードgit cloneして動作させましたが、プロジェクトもに保存されていC:/Users/myUser/gitます。その特定のフォルダですか、それとも変更できますか?

そのフォルダについてはよくわかりません。ローカルのgitリポジトリなどのようですが、何が「管理」しているのか、なぜそのパスを使用しているのか、説明していただけますか?

これは私が理解していることです、私が間違っている場合は私を修正し、事実をまっすぐにする必要があります:

  1. git initすべてのプロジェクト用です
  2. 「ユーザー」の下のgitフォルダーはローカルリポジトリであり、実行するたびgit commitにそのフォルダーが更新されます。
  3. 私がそうするときgit push、それはそのローカルリポジトリから取得し、リモートリポジトリに置きます。
  4. 「HEAD」にアップデートしたいときは、git pull
4

5 に答える 5

39

それは実際には多くの質問と誤解です。それらすべてに対処できるかどうかわからないので、直接質問されたものにのみ対処します。

  1. gitinitはすべてのプロジェクト用です

    ほぼ正しい。git initgitの下にないプロジェクトでgitの使用を開始するために使用されます。すでにgitの下にあるプロジェクトには、を使用しますgit clone

  2. 「ユーザー」の下のgitフォルダーはローカルリポジトリです

    ほぼ正しい。フォルダは実際に.gitはありませんgit。これは、ドットで始まるすべてのファイルとフォルダが非表示と見なされるというUNIXの規則に基づいています。

    次に、フォルダはユーザーフォルダの下にありません。プロジェクトフォルダの下にあります。したがって、フォルダC:/Users/myUser/は1つのプロジェクトです。これが意図していない場合はgit init、ユーザーフォルダで誤って実行した可能性があります。

    各プロジェクトには.git、プロジェクトのルートディレクトリに1つのフォルダがあり、それがプロジェクトのリポジトリです。これが、gitがsvnやcvsと比較して非常に高速である理由の1つです。リポジトリ全体が、ネットワークトラフィックなしでローカルハードディスク上で処理されます。

  3. git pushを実行すると、そのローカルリポジトリから取得し、リモートに配置します

    正解ですが、リモートを持つリポジトリ(通常はgit cloneリモートリポジトリのコピーに使用して作成するリポジトリ)のみが対象です。

    リモートリポジトリが別のマシン上にある必要はないことに注意してください。プロジェクトをローカルフォルダーから別のフォルダーにgitcloneしてから、変更を新しいフォルダーから元のフォルダーにプッシュして戻すことができます。

    このgit cloneコマンドは、リポジトリがリモートに接続し直すために必要な構成を自動的に設定します。git initただし、リモートに接続するように設定されたリポジトリを手動で構成することもできます。

  4. それを「管理」するもの

    この.gitフォルダーは、プロジェクトのリポジトリを管理します。Gitはサーバーとして実行されません*。代わりに、.gitフォルダーは、すべてのgitコマンドが通信するローカルの「サーバー」として機能します。基本的に、gitコマンドを実行すると、.gitフォルダーの内容が編集されます。

    *注:リモートリポジトリはサーバーを実行するため、サーバーに接続できます。しかし、技術的には、実際にはgitサーバーではありません。これらは、gitがダウンロードおよびアップロードできるファイルサーバーです。

于 2012-11-23T09:16:35.217 に答える
3

あなたの3つの4つの理解は多かれ少なかれ正しいですが、いくつかの詳細が欠けています。

git initリポジトリを初期化(つまり作成)します。各プロジェクトは、独自のリポジトリにある必要があります。

を使用してプロジェクトをダウンロードした場合は、再度git clone実行する必要はありませんgit init

悪影響を与えることなく、プロジェクトを別のディレクトリにコピーできるはずです。そのパスはおそらくデフォルトで選択されています。必ずディレクトリ全体を移動してください。gitが実行する必要のあるメタデータは、プロジェクトのディレクトリの隠しファイルに保存されます。

特に他の人と一緒にプロジェクトに取り組んでいるときや、ブランチを使用しているときは、プッシュとプルが複雑になる可能性があります。ここでトピックの完全なイントロを書くのはあまり賢明ではないので、より完全な説明についてはProGitを読むことをお勧めします。

于 2012-11-23T08:56:26.467 に答える
2

git init独自の新しいリポジトリを最初から作成する場合のみです。ディレクトリを空のgitリポジトリに変えます。

git clone既存のリポジトリを新しいリポジトリに複製するために使用する場合、git initは必要でも望ましくもありません。

于 2012-11-23T08:56:56.383 に答える
0

@Jaanusは、@slebetmanがについて説明したことへの1つの追加git pullです。正確に同期しているわけではなく、ローカルにないコミットをフェッチしています。これは単なるコーナーケースです。次のことを考慮してください-

  1. ブランチtest_branchを処理していると仮定します。A、B、Cのコミットはorigin/test_branch(gitサーバー上のブランチ)に存在します。ここで、Cは最新のコミットです。プルを取得し、ローカルブランチにもA、B、Cがあります。

  2. origin/test_branch何らかの理由で、コミットBをリセットし、履歴をAとCのままにするという履歴の再書き込みを強制する必要があったとしましょう。

  3. 今、あなたがgit pullあなたの地元で演奏するとき。言うつもりeverything already up to dateですが、コミットBに追加の変更があることに注意してください。したがって、これを同期操作ではなく、より多くの操作と見なしてくださいget what I don't have

お役に立てば幸いです。

于 2020-05-27T08:09:35.787 に答える
-1
#!bin/bash
DATE=`date +%m%d%Y.%H%M%S`
TARGET="$1.$DATE"
DIR=`pwd`


function batch_convert() {
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
batch_convert $1"/"$file
else
dos2unix $1"/"$file
#echo $1"/"$file
fi
done
}

##################

echo $TARGET
cd $DIR/DCW
git pull
cd ../
batch_convert DCW
cp -R DCW tmp/$TARGET
cd tmp/$TARGET
find . -type d -name "*git*"| xargs -n20 rm -rf



for db in `cat $DIR/tmp/$TARGET/Dblist` ; do
        echo "********** DB IS $db *******"
       for dbfolder in `find * -maxdepth 0 -type d` ;do
    echo `ls -a`
        echo "***** DBFolder is  $dbfolder *****"
    if [ ! $dbfolder = $db ];then
    cp -R $dbfolder $db
    find $db -name "*.ctl"| xargs -I '{}' mv '{}' $db/${db}.ctl
    fi
    done
done
cd ../
tar -cf $TARGET.tar $TARGET
于 2017-03-08T14:42:21.573 に答える