2016-04-05 16 views
6

Ho un problema con git e il mio repository.
Come sincronizzare alcuni file tra due rami in git?

Prima scrivo esempio

git checkout Proj1 
# modify index.html 
git commit -am "Modify Index.html" 
git checkout Proj2 
git show Proj1:index.html > index.html 
git commit -am "Modify Index.html" 
git checkout Proj1 

Questo è il mio modo per mantenere lo stesso contenuto del file in due rami.

Naturalmente posso usare cherry-pick se il commit contiene solo il file che voglio sincronizzare. How can we sync files between two branches in git?

Avete qualche soluzione per questo problema.
Forse qualche alias da scrivere?
Dove posso mantenere il file con l'elenco dei file da sincronizzare?

+0

Mi piacerebbe ancora lavorare su Proj1. – machmet

+7

Sincronizzazione. tra le filiali in GIT è git merge. Qualsiasi altro modo non è il modo giusto. – yorammi

+1

Sono d'accordo con @yorammi, tuttavia puoi investigare [git worktrees] (https://git-scm.com/docs/git-worktree) e link simbolico/hard. Anche se puoi finire in un casino. Non posso aiutarti ulteriormente dato che andrò per unire e non ho investigato ancora molto sul worktree – ThanksForAllTheFish

risposta

0

Se non vi preoccupate circa la storia, allora si può fare commettere un separato sul ramo 2 contenente il file esattamente come sembra sulla punta del commit in Proj1:

git checkout Proj2 
git checkout Proj1 -- index.html 

git commit -am "Modify Index.html" 

In sostanza, questo significa prendi il file ESATTAMENTE come appare nel ramo Proj1.

git checkout -- significa che dopo il trattino viene fornito un nome file (o percorso). Questo può essere utile, anche se vuoi cambiare alcuni file nel tuo repository e preservarne altri.

Quindi, se si desidera, è anche possibile riutilizzare il messaggio di commit dal commettere hai fatto in Proj1 come questo:

git checkout Proj2 
git checkout Proj1 -- index.html 

git commit -a -C Proj1 

Git commit -C significa riutilizzare il commit già avuto.

Dal git documentation "git checkout":

git cassa [-p|--patch] [<tree-ish>] [--] <pathspec>

Quando o --patch sono date, git cassa non commuta rami. Lo aggiorna i percorsi con nome nell'albero di lavoro dal file di indice o da un named (il più delle volte un commit).

[...]

git checkout con o --patch viene utilizzato per ripristinare i percorsi eliminati modificati o il loro contenuto originale dall'indice o sostituire percorsi con il contenuto da un nome (il più delle volte un commit -ish).

E dal git documentation "git commit"

git commit -C <commit>

--reuse-message=<commit>

prendere un oggetto commettere esistente, e riutilizzare il messaggio di log e la informazioni autore (tra cui il timestamp) quando si crea il commit.

Problemi correlati