[英]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 pull --rebase
。 這樣,當其他人編輯了您的JSON文件時,git將首先提取他們的更改,然后嘗試將更改應用於他們的更改。 每次都有一個選項可以執行此操作:只需將分支名稱替換為BRANCH並運行即可: git config branch.BRANCH.rebase true
摘自@Tim Biegeleisen 的評論,我認為這應該是一個答案:
npm i -g coffeescript
例如,一個項目中有2個開發人員(開發人員A和B)。 我將創建2個翻譯文件: A.json
和B.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項目,則更加容易。 我建議您使用grunt
或gulp
運行任務。 例如,您可以參考https://www.npmjs.com/package/grunt-merge-json或https://www.npmjs.com/package/grunt-concat-json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.