git sparsecheckout - 如何进入不同的目录

时间:2012-12-13 17:58:15

标签: git git-submodules git-subtree sparse-checkout pootle

我正在使用pootle来允许人们在PHP Yii项目中翻译.po文件。

翻译人员更新.po文件后,Pootle可以提取并推送翻译。 另外,我们有开发人员在网站上工作,他们也可以更新翻译文件以添加更多要翻译的文本。

Yii要求.po文件位于:

  

YII项目/保护/消息/ EN_GB / messages.po

Pootle要求目录结构为:

  

pootle / YII项目/ EN_GB / messages.po

为了吸引人们push,.git目录需要在pootle / yii-project / .git。

我尝试过使用git sparse checkout,但是这会把文件拉到pootle / yii-project / protected / messages / en_gb / messages.po,遗憾的是pootle没有拿起来。

我无法在其他位置拉动存储库,然后再使用softlink,因为那时pootle将无法找到.git目录。

我真正希望能够做的是稀疏检查目录并将结果映射到另一个目录,即结帐:

  

pootle / yii-project / protected / messages / - > pootle / YII项目

我不想使用git-subtree,因为我希望文件能够由开发人员或翻译人员更新。我不想使用子模块,因为我不喜欢额外的拉动开销,我们希望开发人员将所有更改包含在单个提交中的新功能(而不是主项目上的一个提交和一个在子模块上。)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我们找不到使用git sparsecheckout的解决方案。

相反,我们使用了子模块。

我们首先提取了yii-project / protected / messages目录,并创建了一个名为yii-project-translations的新存储库。

然后,我们降低了每个目录,包括翻译 - 例如:

git mv en_GB en_gb

然后我们将新的存储库作为子模块包含在原始的yii项目中:

cd yii-project/
git subtree split --prefix=protected/messages --branch=yii-project-translations
cd protected/
git rm -rf ./messages
mkdir messages
pushd messages
git init
git remote add origin git-server:yii-project-translations
git pull ../../ yii-project-translations
git push origin -u master
popd

并将此存储库克隆为pootle项目:

cd $POOTLE_HOME/translations/
git clone gitolite@git.algo.travel:yii-project-translations yii-project

最后,我们将pootle数据库中的几个表更新为小写目录名称,所以一切都很好:

update pootle_app_language set code = lower(code);
update pootle_app_directory set pootle_path = lower(pootle_path);
update pootle_app_translationproject set real_path = lower(real_path), pootle_path = lower(pootle_path); 

@ michal-cihar - Weblate看起来很棒。如果我在沿着pootle路径获得90%之前遇到它,我会用它。谢谢!