मैं दो शाखाओं (current और other) के बीच 3 तरह से विलय के लिए git merge-file का उपयोग करने का प्रयास कर रहा हूं जो फ़ाइल द्वारा बहुत पहले फ़ाइल को अलग कर दिया गया है। मैंने इस दृष्टिकोण को चुना क्योंकि git merge करने से बहुत सारे संघर्ष होंगे और यह एक दुःस्वप्न बन जाएगा, जबकि फ़ाइल बेस द्वारा फ़ाइल पर करने से सब कुछ इतना नहीं टूटेगा और सभी परीक्षणों को अपडेट कर देगा जैसा कि मैं साथ जाता हूं परिवर्तन आसान होगा।

तब विचार इस स्क्रिप्ट का उपयोग करने का है जो एक शाखा का नाम, एक फ़ाइल का नाम लेता है और वर्तमान शाखा पर फ़ाइल के अंतिम संस्करण का उपयोग करके मर्ज करता है, संस्करण से विचलन बिंदु और दूसरी शाखा पर अंतिम प्रतिबद्ध से संस्करण .

समस्या यह है कि केवल अलग-अलग वर्गों को हाइलाइट करने के बजाय यह आदेश केवल यह कह रहा है कि पूरी फ़ाइल अलग हो गई है, भले ही वास्तव में केवल कुछ पंक्तियां अलग हों। मुझसे यहां क्या गलत हो रहा है?

#!/bin/bash

common_sha=$(git merge-base HEAD $1)

git show $common_sha:$2 > common
git show $1:$2 > theirs

git merge-file --diff3 $2 common theirs

rm common
rm theirs

यहां उपयोग की जा रही स्क्रिप्ट का एक उदाहरण दिया गया है:

$ git branch -a
* current_branch
  master
  other_branch
$ my_merge.sh other_branch file.txt

यहाँ वे फ़ाइलें हैं जिनका उपयोग किया गया है

common version of file.txt

line 1
line 2
line 3
line 4
line 5

current branch's version of file.txt

line 1
line 2.2
line 3
line 4.1
line 6

other branch's version of file.txt

line 1
line 2.1
line 2.2
line 3
line 4
line 5

और अपेक्षित बनाम वास्तविक परिणाम

expected result after running the script

line 1
<<<<<<< file.txt
line 2.2
||||||| common
line 2
=======
line 2.1
line 2.2
>>>>>>> theirs
line 3
line 4.1
line 6

actual result

<<<<<<< file.txt
line 1
line 2.2
line 3
line 4.1
line 6
||||||| common
line 1
line 2
line 3
line 4
line 5
=======
line 1
line 2.1
line 2.2
line 3
line 4
line 5
>>>>>>> theirs


git
0
user2449798 24 मई 2019, 17:44

1 उत्तर

सबसे बढ़िया उत्तर

फ़ाइल के साथ जांचें:

git show HEAD:a-file > a.txt
git show $1:a-file > b.txt # replace $1 for the revision you are playing with
git show $( git merge-base HEAD $1 ):a-file > c.txt

उन पर फ़ाइल का उपयोग करें (file a.txt b.txt c.txt) और जांचें कि प्रत्येक के लिए मान क्या है यह देखने के लिए कि क्या वे सभी एक प्रारूप (सीआरएलएफ या एलएफ) हैं या यदि वे सीआरएलएफ और एलएफ के बीच बदलते हैं ... या आप सभी 3 को खोल सकते हैं एक अच्छा टेक्स्ट एडिटर जो आपको प्रारूप (यूनिक्स/विंडोज़) दिखा सकता है। यदि वे मिश्रित हैं, इसलिए आप उस समस्या को देख रहे हैं।

2
eftshift0 24 मई 2019, 14:55