Ho letto alcune domande git qui, ma non riusciva a trovare una risposta a questo:Git: la fusione rami pubblici e privati, mentre mantenendo intatti alcuni file in entrambi i rami
ho una pubblica e una privata filiali in cui voglio consentire a determinati file di divergere.
Questi sono i file di configurazione con password e le mie personalizzazioni locali.
Desidero essere in grado di unire i rami in entrambi i modi: da privato a pubblico e viceversa, ma non voglio che questi file specifici vengano automaticamente uniti.
C'è un modo per configurare git in questo modo? Mi piacerebbe trovare una soluzione automatizzata :) - in modo che la fusione possa essere eseguita come al solito.
EDIT: ecco la soluzione che ha funzionato per me (Grazie a VonC per i consigli su gitattribute)
l'unica cosa inaspettata per me era che "merge protezione" inizia a lavorare solo dopo file hanno divergenti nei due rami, non subito dopo la seguente configurazione è stata applicata
.gitattributes (pista con git, se si desidera condividere questo) o .git/informazioni/attributi:
file1 merge=keepmine
path/file2 merge=keepmine
keepmine è nominato direttore di fusione personalizzato che è solo un comando do-nothing chiamato al posto del conducente fusione interna sui file selezionati, che è impostato al di sotto
Quando la fusione dal privato al ramo pubblico faccio di solito git merge --squash private
. In questo modo le modifiche private non entreranno nella cronologia git sul ramo pubblico.
.git/config:
#public repository
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = <public repo git url>
#private repository
#has to set up with git init and populated with the initial commit to branch mybranch
[remote "private"]
push = +:
url = /path/to/local/private/repo
[merge "keepmine"]
name = dont_merge_selected_files
driver = echo %O %A %B
[branch "master"]
remote = origin
merge = refs/heads/master
#private branch settings
[branch "mybranch"]
remote = private
merge = refs/heads/mybranch
se c'è un modo per migliorare questo si prega di commentare
funziona, grazie! – Evgeny
Funziona solo quando il file viene modificato in entrambi i rami. Una volta risolta l'unione con keepmine, la seguente fusione nell'altro ramo verrà risolta da recurse. – f3r3nc