簡體   English   中英

Git 與 JSON 文件沖突

[英]Git conflicts with JSON files

我們的網站使用一堆 JSON 文件和翻譯(每種語言一個文件)進行本地化。 文件的內容如下所示:

{
    "Password": "Passwort",
    "Tables": "Tische"
}

許多團隊成員同時編輯這些 JSON 文件,添加新短語並編輯現有短語,即使人們在更改不同的行,我們也會遇到很多沖突。

有沒有辦法以有助於避免合並沖突的方式設置 git?

PS我發現這個腳本有助於在本地合並: https://gist.github.com/jphaas/ad7823b3469aac112a52 但是,我對可以為團隊中的每個人(甚至是通過 GitHub 的 Web 界面編輯 JSON 的人)解決問題的解決方案感興趣。

即使人們改變了不同的路線,我們也會遇到很多沖突

事實並非如此,只有在同一行被不同的人修改,提交並隨后合並的情況下,您才會發生沖突。

哦,我實際上嘗試了一下,遇到了一些奇怪的問題。

提交1(主):

{
    "a": "1",
    "b": "2",
    "c": "3",
    "d": "4",
    "e": "5",
    "f": "6",
    "g": "7"
}

提交2(tmp)

{
    "A": "1",
    "B": "2",
    "C": "3",
    "d": "4",
    "e": "5",
    "f": "6",
    "g": "7"
}

提交3(主):

{
    "a": "1",
    "b": "2",
    "c": "3",
    "d": "4",
    "E": "5",
    "F": "6",
    "G": "7"
}

git merge tmp :正確的結果

{
    "A": "1",
    "B": "2",
    "C": "3",
    "d": "4",
    "E": "5",
    "F": "6",
    "G": "7"
}

但是,如果還修改了行"d" ,則會發生沖突,也許git無法建立diff邊界。 我為避免這種愚蠢的git行為而提出的愚蠢建議是在JSON文件中添加“ padding”(丑陋,不是嗎?但不再有沖突):

{
    "a": "1",

    "b": "2",

    "c": "3",

    "d": "4",

    "e": "5",

    "f": "6",

    "g": "7"
}

在這種情況下,我要做的一件事是將配置保留在數據庫表中而不是JSON文件中-如果它們經常更改所有配置。 正如其他人已經指出的那樣,如果您一直在對配置進行大量更改,那么您就無能避免沖突的事情。 無論如何,您的示例看起來都更像是英語單詞與某種其他語言之間的映射,因此三列表就足夠了。

JSON文件(如果需要)可以每次動態生成,也可以在部署期間從數據庫表為每個服務器生成一次。

看到如此多沖突的另一個原因可能是您的開發人員正在使用不同的行尾配置。 請參閱如何在Git中更改行尾設置 為了找出答案,您可以使用Hex編輯器打開json文件,並查看整個文件中所有行尾是否一致。

您可以運行git pull --rebase 這樣,當其他人編輯了您的JSON文件時,git將首先提取他們的更改,然后嘗試將更改應用於他們的更改。 每次都有一個選項可以執行此操作:只需將分支名稱替換為BRANCH並運行即可: git config branch.BRANCH.rebase true

摘自@Tim Biegeleisen 的評論,我認為這應該是一個答案:

例如,一個項目中有2個開發人員(開發人員A和B)。 我將創建2個翻譯文件: A.jsonB.json A.json用於開發人員A, B.json用於開發人員B。我將創建名為en_US.json的轉換文件。 .gitignore文件中的en_US.json被忽略。

因此,翻譯目錄的結構如下:

$ tree . -a
.
├── A.json
├── B.json
├── en_US.json
└── .gitignore

所以現在,我必須創建一個任務,將所有JSON文件組合到en_US.json。 如果您正在運行Javascript項目,則更加容易。 我建議您使用gruntgulp運行任務。 例如,您可以參考https://www.npmjs.com/package/grunt-merge-jsonhttps://www.npmjs.com/package/grunt-concat-json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM