2013-08-19 6 views
5

Ich habe einen Entwickler, der auf einem Ordner funktioniert und einen anderen, der auf einem anderen funktioniert. würde Ich mag die Produktion mit einem bestimmten Ordner Ich suche nach einem Befehl wie zu aktualisieren: es möglichGit holen nur ein Verzeichnis

cd /myproject 
git pull myfolder 

und erwarten, dass nur myfolder Ist

aktualisiert werden?

ok, ich werde umformulieren ... Ich habe ein Projekt, einen Zweig und zwei Entwickler und zwei Ordner im Projekt. Jeder Entwickler arbeitet an einem Ordner. beide machen Änderungen und schieben sie in den Zweig.

ich nur die Änderungen von einem Ordner in meinem lokalen Rechner

Basic/Einfach ziehen will, ist es nicht?

+0

Ihre Frage ist nicht ganz klar, . Angenommen, Sie haben die Ordner 'dev1',' dev2' und 'production'. Fragen Sie, wie Sie alle Änderungen von 'production' aus einem anderen Zweig übernehmen können, oder fragen Sie, wie man den Inhalt von' production' im Wesentlichen auf einen der Dev-Ordner setzt? Wie auch immer, die Art, wie Sie sich diesem nähern, klingt wie Ihre Arbeit gegen das Werkzeug. – jszakmeister

+0

ok, ich werde umformulieren ... Ich habe ein Projekt, einen Zweig und zwei Entwickler und zwei Ordner im Projekt. Jeder Entwickler arbeitet an einem Ordner. beide machen Änderungen und schieben sie in den Zweig. Ich möchte nur Änderungen von einem Ordner in meine lokale Maschine ziehen – fredy

+0

Verwenden Sie Git, um eine Arbeitskopie zu verwalten? Oder suchen Sie wirklich nur den Inhalt eines Ordners im Repository auf Ihren Rechner? Gemessen an Ihrem Kommentar zu Pherric Oxide, klingt es wie letzteres. – jszakmeister

Antwort

1

Haben Sie eine Art Produktionszweig? Unter der Annahme einer Entwickler und Produktionszweig ...

# Get all the changes from the dev branch 
git checkout dev 
git pull origin dev 

# Checkout the production branch 
git checkout production 

# Checkout the dev version of the folder you want 
git checkout dev myfolder 

# Commit all the changes that are now showing up. 

Diese Art von einer schrecklichen Art und Weise, die Dinge zu tun, weil Sie die Änderungshistorie sind zu verlieren, wenn Sie Prüfung und recommit nur diesen Ordner.

+0

Danke aber vielleicht war ich nicht sehr klar ... Ich möchte nur die Updates eines Ordners bekommen. Ich möchte keine Kasse machen. Lässt sagen, dass beide Entwickler einige Commits in den gleichen Zweig gemacht haben, aber ich möchte nur Änderungen von einem Ordner bekommen – fredy

+0

Ihr 3. Checkout-Befehl ist inkorrekt. Es sollte "git checkout dev - myfolder" sein (der 'dev' und' myfolder' sind vertauscht). – jszakmeister

4

was Angenommen, du bist wirklich fragen, ist remote-Dateien von einem Git-Repository zu packen, ohne einen Arbeitsbaum Ihrer eigenen (oder einen Klon des Repository lokal), könnten Sie dies tun:

git archive --format=tgz --remote=<url-to-repo> master -- myfolder | tar zxvf - 

Dies sagt, um eine gezippte Teer-Ball des Master-Zweig des Repository Leben bei <url-to-repo>, sondern nur den Inhalt unter myfolder. Piping, die durch tar wird die Daten entpacken und in das aktuelle Arbeitsverzeichnis legen.

Wenn Sie tatsächlich versuchen, einen funktionierenden Baum zu verwalten und mit den anderen zwei Entwicklern zu arbeiten, dann geht das, was Sie tun wollen, wirklich gegen den Strich des Tools. Aber Sie müssten viel ausgeklügelter darüber sein, was Sie versuchen, zu erreichen, damit jemand einen guten Workflow-Vorschlag macht.

aktualisieren:

So klingt es, als ob Sie nur einen Ordner der Änderungen in einem verwalteten Arbeits Baum holen wollen. Tut mir leid, aber Git funktioniert nicht so. Wie ich in den folgenden Kommentaren in den Kommentaren sagte, verwaltet Git Bäume von Dateien. Es lässt nicht zu, dass ein Teil eines Baums eine Revision hat und ein anderer Teil eine andere Revision hat, wie Sie vorschlagen - vielleicht sind Sie ein früherer Benutzer von Subversion, wo dies möglich war?

Sie können einen Effekt erhalten, der dem ähnelt, was Sie möchten, aber Sie müssen Ihre Arbeitskopie ändern. Ich würde nicht commit die Änderung, es sei denn, Sie wollen verwerfen einen Ihrer Entwickler arbeiten.Man könnte dies zu:

$ git fetch 
$ git checkout @{u} -- myfolder 

git fetch Ihre Remote-Referenzen auf den neuesten Stand bringen - es wird die neuesten Informationen von den Servern holen. git checkout @{u} -- myfolder wird machen myfolder aussehen wie das, was im Tracking-Zweig existiert. Dies hat zwei Folgen:

  • Sie haben nicht alle Änderungen auf Ihrem lokalen Niederlassung haben (und Sie wollte sie nicht, so dass in Ordnung ist), und

  • myfolder zeigen als geändert, weil der Inhalt von myfolder mit dem neuesten verfügbaren aus dem Remote-Repository aktualisiert wurde, aber es ist nicht das gleiche wie Ihre aktuelle Revision.

Um Ihre Arbeitskopie wieder normal, dies zu tun:

$ git checkout -- myfolder 

Von dort rufen Sie bekommen Ihre Niederlassung up-to-date mit der Fernbedienung Ihres üblichen Mechanismus folgen (wahrscheinlich git pull).

Dies ist jedoch wahrscheinlich nicht, wie Sie arbeiten möchten. Trotz Ihres Kommentars, "spielt keine Rolle", es spielt wirklich eine Rolle. Es gibt oft bessere Möglichkeiten, um Ihr Gesamtziel zu erreichen und Ihre Entwicklung zu verwalten, aber es erfordert Verständnis, was Sie versuchen zu tun. In dem Moment, was Sie vorschlagen wirklich geht gegen, wie Git soll funktionieren.

Also lassen Sie mich ein paar Dinge für Sie da draußen. Forschung mit Zweig Themen als eine Möglichkeit, die Entwicklungsarbeit, die getan wird, anstatt die Ordner für jeden Entwickler in der Struktur zu verwalten. Bei den Zweigen und dem Zusammenführen können Sie logische und logische Änderungen vornehmen, während Sie sie testen und für die Aufnahme in die Produktion freigeben.

Ein guter Anfang ist here. Es enthält eine beträchtliche Menge an Informationen selbst, und einige folgen auf Links zu mehrere verschiedene Arten von Git-Workflows. Der Ort, an dem Sie enden möchten, ist , wo es ein Commit gibt, das die Version darstellt, die Sie tatsächlich in Produktion einfügen, ohne die Arbeit zu zerstören, die andere für Sie tun. Im Idealfall würden Sie das, was in die Produktion geschoben wurde, auf eine sinnvolle Art und Weise taggen, .

Ich weiß, niemand mag es zu hören, aber Training kann in Ihrem Fall sehr hilfreich sein. GitHub bietet einige free online classes sowie einige andere Ressourcen. Aus Erfahrung zu urteilen, sobald Sie begreifen, wie Git funktioniert und die Probleme, die es löst, werden Sie mit einem viel besseren Workflow enden.

+0

Ich habe ein lokales Repository, das auf dem neuesten Stand ist. Nun haben beide Entwickler Änderungen vorgenommen, jeweils in seinem Ordner. Ich möchte nur die Änderungen von einem Ordner "greifen" Kann ich es tun? – fredy

+0

Wenn es auf dem neuesten Stand ist, hast du dann nicht schon seine Änderungen? Was hast du probiert? Sie sollten Ihre Frage mit diesen Informationen aktualisieren. – jszakmeister

+0

lässt sagen, ich habe alles auf meinen PC gezogen. dann wurden die zwei Ordner aktualisiert. Heute möchte ich nur die Änderungen von einem Ordner bekommen. Kann ich es schaffen? – fredy

0

Ja, es ist einfach zu git fetch nur ein git Unterverzeichnis. Angenommen, Sie haben das folgende Projektverzeichnis in Ihrem Remote-Git-Repo.

project/ 
    ├── code 
    └── data 

Im Moment davon aus, dass Sie das Projekt auf Ihrem lokalen Dateisystem als git-Repository geklont.

$ cd project 
$ rm -rf code 

#now we try to fetch the "code" directory. 
$ git fetch 
$ git checkout HEAD code 

Falls Sie Verzeichnisstruktur wie verschachtelt,

project/ 
├── code 
│   ├── dev 
│   └── test 
└── data 

Dann in diesem Fall sollten Sie das spezifische Verzeichnis verwenden, die Sie wollen,

$ git checkout HEAD code/dev