Git – Ignora i file durante l’unione

Ho un repository chiamato myrepo sul server remoto myrepo .

L’ho clonato sulla mia macchina locale. Crea due rami aggiuntivi: staging e dev . Spinto questi rami anche a distanza.

Adesso:

  local remote server -------------------------------------------------------- master ==> Pushes to `master` ==> deployed to `prod` staging ==> Pushes to `staging` ==> deployed to `staging` dev ==> Pushes to `dev` ==> deployed to `dev` 

Ho un file chiamato config.xml che è diverso su ogni ramo.

Voglio ignorare questo file solo durante le unioni. Ma voglio che questo sia incluso quando eseguo il checkout o effettuo il commit da / verso il branch repo.

La ragione per cui voglio questo è che abbiamo uno script di distribuzione che estrae (checkout) il ramo specifico e distribuisce sui rispettivi server. Quindi abbiamo bisogno del file config.xml di quel ramo specifico andare nel server specifico come indicato sopra quando distribuito.

Immagino che .gitignore non funzioni. Quali sono le altre opzioni? Si noti che il file ignorato dovrebbe far parte del checkout e del commit, che è importante. dovrebbe essere ignorato solo durante le unioni.

Grazie!

Ho superato questo problema utilizzando il comando git merge con l’opzione ‘–no-commit’ e quindi ho rimosso esplicitamente il file staged e ignorato le modifiche al file. Ad esempio: dire che voglio ignorare eventuali modifiche a myfile.txt procedo come segue:

 git merge --no-ff --no-commit  git reset HEAD myfile.txt git checkout -- myfile.txt git commit -m "merged " 

È ansible inserire le istruzioni 2 e 3 in un ciclo for se si dispone di un elenco di file da saltare.

Ho finito per trovare attributes git. Provandolo Lavorando così lontano. Non ho ancora controllato tutti gli scenari. Ma dovrebbe essere la soluzione.

Unisci strategie: attributi Git

.gitattributes – è un file di livello root del repository che definisce gli attributi per una sottodirectory o un sottoinsieme di file.

Puoi specificare l’attributo per dire a Git di utilizzare diverse strategie di unione per un file specifico. Qui, vogliamo conservare il config.xml esistente per il nostro ramo. Dobbiamo impostare l’ merge=ours in config.xml nel file .gitattributes .

merge=ours our tell git per usare il nostro file (current branch), se si verifica un conflitto di merge.

  1. Aggiungi un file .gitattributes al livello principale del repository

  2. È ansible impostare un attributo per confix.xml nel file .gitattributes

     config.xml merge=ours 
  3. E poi definire un manichino la nostra strategia di unione con:

     $ git config --global merge.ours.driver true 

Se unisci il ramo di sviluppo del modulo stag , invece di fare in modo che l’unione sia in conflitto con il file config.xml, il file config.xml del ramo stag si conserva alla versione che avevi in ​​origine.

Si può iniziare usando git merge --no-commit , e quindi modificare l’unione come si preferisce, ovvero disimballando config.xml o qualsiasi altro file, quindi esegui il commit. Sospetto che tu voglia automatizzarlo ulteriormente dopo aver usato gli hook, ma penso che varrebbe la pena passare manualmente almeno una volta.

È ansible utilizzare .gitignore per mantenere config.xml fuori dal repository e quindi utilizzare un hook post commit per caricare il file config.xml appropriato sul server.

Qui git-update-index – Registra il contenuto del file nell’albero di lavoro all’indice.

 git update-index --assume-unchanged  

Esempio:-

git update-index --assume-unchanged somelocation/pom.xml