2012-11-23 6 views
15

Was ist git init für genau? Muss ich es einmal pro Computer oder einmal pro Projekt tun, das Git verwendet? Ich habe mein Projekt heruntergeladen von git clone und habe es funktioniert, aber jetzt speichert es mein Projekt auch auf C:/Users/myUser/git, ist das bestimmte Ordner oder kann ich es ändern?Verständnis git init

Ich weiß nicht wirklich viel über diesen Ordner, es scheint wie ein lokales Git Repo oder etwas zu sein, aber was "verwaltet" es, oder warum es diesen Pfad verwendet, können Sie es bitte erklären?

Das ist, was ich verstehe, mich zu beheben, wenn ich falsch bin, Fakten gerade bekommen müssen:

  1. git init für jedes Projekt ist i
  2. Der git-Ordner unter „Benutzer“ ist die lokale Repo und jedes Mal do git commit, dieser Ordner wird aktualisiert.
  3. Wenn ich git push mache, dauert es von diesem lokalen Repo, und setzt auf Remote-Repository.
  4. Wenn ich will „HEAD“ aktualisieren, ich

Antwort

30

Das ist eigentlich eine Menge Fragen und Missverständnisse. Ich bin mir nicht sicher, ob ich in der Lage wäre, sie alle anzusprechen, also werde ich nur auf das eingehen, was direkt gefragt wird.

  1. git init ist für jedes Projekt

    Fast richtig. git init wird verwendet, um git für ein Projekt zu verwenden, das nicht unter git liegt. Für Projekte, die bereits unter Git sind, verwenden Sie git clone.

  2. Der git-Ordner unter "Benutzer" ist die lokale Repo

    Fast richtig. Der Ordner ist eigentlich .git nicht git. Dies ergibt sich aus der Unix-Konvention, dass alle Dateien und Ordner, die mit einem Punkt beginnen, als verborgen betrachtet werden.

    Zweitens ist der Ordner nicht unter Ihrem Ordner Benutzer. Es befindet sich unter Ihrem Projektordner. So ist der Ordner C:/Users/myUser/ ein Projekt. Wenn dies nicht Ihre Absicht ist, haben Sie höchstwahrscheinlich versehentlich git init in Ihrem Benutzerordner ausgeführt.

    Jedes Projekt hat einen .git Ordner im Stammverzeichnis des Projekts und das ist das Repository des Projekts. Dies ist einer der Gründe, warum git im Vergleich zu svn oder cvs so schnell ist - das gesamte Repository wird auf der lokalen Festplatte ohne Netzwerkverkehr verarbeitet.

  3. Wenn ich git push tun, dauert es aus diesem lokalen Repo und setzt auf Fern

    Richtig, aber nur für repos, die Fernbedienungen haben (die in der Regel repos sind, die Sie mit git clone erstellen kopieren ein Remote Repo).

    Beachten Sie, dass das Remote-Repo nicht auf einem anderen Computer installiert sein muss. Sie können ein Projekt aus einem lokalen Ordner in einen anderen Ordner kopieren und dann Änderungen aus dem neuen Ordner zurück in den ursprünglichen Ordner verschieben.

    Mit dem Befehl git clone wird automatisch die erforderliche Konfiguration für die Repo-Verbindung zu einer Gegenstelle eingerichtet. Sie können jedoch auch manuell ein Repo-Setup mit git init konfigurieren, um eine Verbindung zu einer Fernbedienung herzustellen.

  4. was "schafft" es

    Der .git Ordner verwaltet Repo Ihres Projekts. Git läuft nicht als Server *. Stattdessen fungiert der Ordner .git als Ihr lokaler 'Server', mit dem alle git-Befehle kommunizieren. Im Grunde bearbeitet ein Befehl git den Inhalt des Ordners .git.

    * Hinweis: Remote-Repos führen Server aus, sodass Sie eine Verbindung zu ihnen herstellen können. Aber technisch sind sie nicht wirklich Git Server. Sie sind Dateiserver, von denen git herunterladen und hochladen kann.

+0

Also, wenn ich in meinem Projektordner bin und schreiben 'git commit', überträgt sie dann meine neue Daten zu' .git' Ordner, der auch in meinem Projektordner ist? Oder wo es die Dateien festschreibt, da 'git push' es zum externen Repo schickt. – Jaanus

+0

@Jaanus: Das ist richtig. 'git commit' speichert den letzten Änderungssatz von staging in HEAD in Ihrem' .git'-Ordner. 'git push' synchronisiert den Remote Repo mit Ihrem' .git' Ordner, während 'git pull' den' .git' Ordner mit dem Remote Repo synchronisiert. – slebetman

3

Ihre drei vier Vereinbarungen sind nur git pull tun mehr oder weniger korrekt, wenn Sie ein paar Details fehlen sind.

git init initialisiert (d. H. Erstellt) ein Repository. Jedes Projekt sollte in einem eigenen Repository sein. Wenn Sie Ihr Projekt mit git clone heruntergeladen haben, müssen Sie git init nicht erneut ausführen.

Sie sollten Ihr Projekt ohne negative Auswirkungen in ein anderes Verzeichnis kopieren können. Dieser Pfad wurde wahrscheinlich standardmäßig ausgewählt. Stellen Sie sicher, dass Sie das gesamte Verzeichnis verschieben. Die Metadaten, die git ausführen muss, sind in versteckten Dateien im Projektverzeichnis gespeichert.

Das Schieben und Ziehen kann kompliziert werden, besonders wenn Sie mit anderen an einem Projekt arbeiten und wenn Sie Zweige verwenden. Es ist nicht wirklich vernünftig für mich, ein vollständiges Intro zum Thema hier zu schreiben, also würde ich vorschlagen, dass Sie gehen, lesen Sie Pro Git für eine gründlichere Erklärung.

2

git init ist nur für wenn Sie Ihr eigenes neues Repository von Grund auf neu erstellen. Es verwandelt ein Verzeichnis in ein leeres Git-Repository. Wenn Sie git clone verwenden, um ein vorhandenes Repository in ein neues zu klonen, ist git init weder erforderlich noch erwünscht.

-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 
+0

Das mag eine großartige Antwort sein, aber ohne Beschreibung oder Kommentare habe ich keine Ahnung, was das tut und wie es das Git Problem anspricht. Genauer gesagt, was ist hier los und warum wurde diese Antwort eingereicht? Danke vielmals. – zipzit

Verwandte Themen