Schließen Sie .svn-Ordner in git aus

68

Ich versuche, die Ordner von subversion von der Verfolgung durch git auszuschließen. Ich habe ein paar verschiedene Setups für .git / info / exclude ausprobiert, aber es scheint nicht zu funktionieren. Ich würde git-svn verwenden, aber es ist schwierig, Zugriff anzufordern, damit dies funktioniert. Deshalb möchte ich dies lieber umgehen, indem ich die Ordner ausschließe.

Ich möchte ".svn / Einträge" ausschließen

Ich habe versucht, die folgenden Zeilen zu .git / info / exlude hinzuzufügen: .svn Einträge .svn / Einträge Einträge svn

Egal was ich versuche, .svn-Einträge werden angezeigt, wenn ich den Git-Status ausführe

johannix
quelle
Was meinst du damit? Es ist schmerzhaft, den Zugriff anzufordern, damit git-svn funktioniert. git-svn gibt nur svn-Befehle aus. Wenn Sie also bereits über SVN-Zugriff verfügen, können Sie git-svn verwenden, ohne dass jemand etwas davon weiß oder etwas ändern muss
cpjolicoeur
Zugriff, um Dinge auf meinem Arbeitscomputer zu installieren. Es fehlt ein Perl-Modul, und die Admins zu bitten, diesen Mod zu machen, ist nur ein Schmerz ...
Johannes

Antworten:

50

Ich denke, Sie möchten eine Gitignore-Datei in Ihrem Verzeichnis der obersten Ebene verwenden. Dies funktioniert, wenn Sie ".svn / entry" in eine Zeile in dieser Datei einfügen. Sie können auch einfach ".svn" anstelle von ".svn / entry" eingeben.

EDIT: Siehe Kommentare. Wenn die Dateien bereits von git verfolgt werden, werden sie immer in angezeigt git status.

Jesse Rusak
quelle
2
Ich habe es auch versucht, und das hat nicht funktioniert. Das Problem ist, dass jeder Ordner seine eigenen .svn / Einträge hat.
Johannes
4
Dies funktioniert bei mir auch bei einem in jedem Ordner. Werden die Einträge in angezeigt, svn statusweil Sie git bereits gebeten haben, sie zu verfolgen? Wenn Sie sie bearbeitet git addhaben, werden sie angezeigt, egal was passiert. Nur git rm --cachedsie und du wirst in Ordnung sein.
Jesse Rusak
Da ist es. Ich begann damit, alle Dateien im Kofferraum hinzuzufügen ... Guter Fang, Jesse!
Johannes
4
Nicht die eleganteste Sache der Welt, aber ich habe Folgendes verwendet, um rekursiv .svn-Ordner zu entfernen (gemäß @JesseRusak): for dir in $(find ./ -type d); do git rm --cached -r $dir/.svn; done;
ghayes
2
Die Regel von ghayes ist gefährlich und möglicherweise ein Sicherheitsproblem, wenn jemand Dateinamen mit darin eingebetteten Befehlen platziert hat. Oder es schlägt einfach fehl, weil beispielsweise ein Dateiname ein Leerzeichen enthält. Ich schlage stattdessen diese Variante vor: find ./ -type d -name .svn -print0 | xargs -0 git rm --cached -r
mc0e
25

Fügen Sie ".svn" in eine ~/.gitexcludesDatei ein. Dann erzähl git davon:

echo '.svn' > ~/.gitexcludes
git config --global core.excludesfile "/home/USER_NAME/.gitexcludes"

(Stellen Sie sicher, dass Sie USER_NAME so ändern, dass es auf Ihr Home-Verzeichnis verweist.)

cmcginty
quelle
Casey, ich dachte wirklich, dass das funktionieren würde ... aber leider nicht. Das ist ziemlich frustrierend.
Johannes
2
Was ist der Unterschied zwischen .gitexcludesund .gitignore?
Ehtesh Choudhury
1
@Shurane Siehe stackoverflow.com/questions/10066749/git-excludes-vs-ignores - Ausschlüsse sind nicht versioniert, Ignorierungen sind.
Ben Flynn
Hat funktioniert. Hinweis: Es sollte "~ / .gitexcludes" sein
Yauhen Yakimovich
3

Was ist zu tun Casey , außer benennen Sie die Datei .gitignoreund legen Sie sie im Stammverzeichnis Ihres Git-Repos ab.

Ich mache auch gerne eine, attrib +h .gitignoredamit sie nicht in meinen Explorer-Fenstern angezeigt wird.

Andrew Burns
quelle
3

wenn Sie das svn-Verzeichnis behalten möchten.

Sie können zuerst Folgendes ausführen:

for dir in $(find ./ -type d -name \*.svn); do git rm --cached  -r $dir; done;

und dann echo ".svn" >>.gitignore im Stammverzeichnis ausführen

tengzhao201
quelle
2

Da jeder versionierte Ordner ein .svn-Verzeichnis hat, müssen Sie Folgendes eingeben:

* /. svn / *

nils petersohn
quelle
Das funktioniert nicht. Es wird ignoriert src/.svnund coolStuff/.svnaber nicht src/main/.svn.
MatrixFrog
1
Für mehrere Ordner ist das " * / " der richtige Weg! als Sie brauchen zwei Zeilen in .gitignore: " /.svn/ " und " * /. svn / "
nils petersohn
Für den Ausschluss von Unterordnern verwenden Sie: ** /. svn /
Gweltaz Niquel