2010-01-27 3 views
5

Ich möchte Git für meine eigenen Zwecke verwenden und ich muss Subversion-Repository in meiner Firma verwenden. Ich weiß, dass es einen "git svn" -Befehl gibt, aber es erfordert auch einen lineitären Verlauf im git-Repository. Das Problem damit ist, dass ich möchte: - Git Repository mit einem anderen meinen Git-Repository auf meiner Remote-Festplatte zu synchronisieren, so dass ich es mit einem anderen Git-Repository auf anderen Computer, - und das Wichtigste synchronisieren kann: Ich möchte Commit häufig in meinem Git-Repository und wenn ich entscheide, dass diese kleinen Schritte es wert sind, zu committen (groß genug um es zu teilen) möchte ich sie an svn binden, aber mit nur einem Commit ... Also würde ich nicht alle meine zeigen wollen git (mayby ​​manchmal blöd, zu klein, um sich nur an etwas zu erinnern) in svn, - und mit 'git svn' kann ich keine Zweige verwenden (denn wenn ich sie mit dem Master zusammenfüge, hat der Master keine linerale Historie).Verwenden Sie Git für meine eigene und Subversion in der Firma

Bitte helfen Sie ... Vielleicht gibt es einen Workflow, in dem ich Git in seiner vollen Pracht und Svn verwenden kann, um größer zu machen (nicht meine 'private' ... vielleicht sehr kleine Änderungen und die für einige Zeit casue dass Kabeljau Kompiliert nicht) Änderungen an meinem Firmen-Repository.

Vielen Dank im Voraus!

Antwort

8

Ich möchte Git Repository mit einem anderen meinem Git-Repository auf meiner Remote-Festplatte synchronisieren, so dass ich es mit einem anderen Git-Repository auf anderen Computer synchronisieren kann.

Versuchen:

git remote add external-repo ssh://host/path/to/git/repo.git 
git push origin external-repo 

Ich möchte häufig in meinem Git Repository begehen und wenn ich entscheiden, dass diese kleine Schritte sind es wert (groß genug zu teilen) zu begehen, ich möchte begehen sie zu Svn aber mit nur einem commit.

Kein Schweiß. Kollabieren mehrere Commits mit git rebase -i (dies wird als „Quetschen“) und entscheiden, ob Sie behalten möchten, wegzuwerfen oder quetschen jede begehen in einen größeren. Es ist sehr hilfreich, sich zu organisieren, bevor Sie zu einem externen Repository wechseln. Die -i ist für den "interaktiven" Modus.

mit 'git svn' kann ich keine Verzweigungen verwenden (weil wenn ich sie mit Master zusammenführe, hat Meister keine lineral Geschichte).

Das stimmt nicht. Richten Sie einfach einen Zweig unter git für jeden Zweig ein, den Sie mit svn verfolgen möchten. In der Gegenrichtung schieben Sie sowieso nur einen Zweig nach dem anderen.

2

Ich arbeite so die ganze Zeit in meiner Firma (wirklich kann Subversion nicht mehr ausstehen). Was lässt Sie denken, dass Sie Zweige mit Git Svn nicht verwenden können? Du kannst sie nicht nur benutzen, sondern auch direkt von ihnen zurück in Subversion.

Um das Verschmelzen von Commits zu tun, würden Sie etwas wie git rebase remotes/trunk --interactive und Squash commits zusammen verwenden. Sie können jedoch nicht gleichzeitig Ihre erweiterte Version und Ihre komprimierten Versionen verwalten. Entweder du bekommst all die kleinen, winzigen Commits oder du bekommst die gequetschten.

+0

gibt es einen Videocast diesen Workflow zeigt? das klingt nach etwas, das ich gerne ausprobieren würde, Cheers – roundcrisis

+0

Danke für die schnelle Antwort. Aber was wäre, wenn ich detaillierte Geschichte von mir in git haben möchte und als Konsequenz, was ich nicht zu commits commits? Branches ... Kann ich nur meine (nicht in SVN geteilt) Filialen haben? Wie ich es sehe, kann ich meinen Zweig nicht mit Meister zusammenführen und dann in Master Git Svn ... weil Meister keine lineare Geschichte haben wird. Was ist Ihre beste Praxis, um mit git und mit svn in der Firma persönlich zu arbeiten? Können Sie Ihren Arbeitsablauf anhand von Beispielbefehlen anzeigen? – miki

+0

@miki: Re Branches - ja diejenigen (nicht geteilt in svn) waren die, von denen ich sprach. Sie können so viele Zweige erstellen, wie Sie möchten, und sie wieder mit dem Master zusammenführen, bevor Sie sie an Svn zurückgeben. Oder du kannst direkt von diesen Zweigen zurück zum Svn. –

2

Statt der interaktiven Rebase können Sie auch git merge --squash auf dem "offiziellen" Zweig verwenden.

git checkout master 
git merge --squash development 

Dies hat den Vorteil, dass es Ihre Entwicklungsgeschichte nicht zerstört. Sie können jetzt ein großes Commit erstellen, das alle Ihre Änderungen enthält, oder Sie können den Index zurücksetzen (git reset) und git add -p oder git gui verwenden, um eine beliebige Anzahl separater Commits von Ihrem Zweig zu erstellen, die Sie dann normalerweise an master und senden würden .

1

Was ich tun (und der einfachste Weg, dies zu tun) ist nicht zu versuchen, zwei Methoden der Quellcodeverwaltung zu verwalten sofort. Ich benutze Git für meine eigene Versionskontrolle. Ein paar Mal pro Woche, wenn ich bereit bin, mich an das zentrale Repository zu binden, checke ich den Master-Zweig in git aus und verbinde ihn mit TFS. Änderungen vom Server werden in meinen Entwicklerzweig ausgecheckt und wieder in meinen Code eingebunden.

Es ist nicht elegant, mit allen Mitteln, aber da ich nur Kasse bin/vom zentralen Repo in der Woche ein paar Mal checkin, es funktioniert sehr gut.