用于在init上创建.gitattributes的git别名 - 如何添加新行?

时间:2013-12-26 16:16:50

标签: git printf newline git-bash git-alias

我的最新迭代

jinit= !git init && printf "* text=auto\n*.java text\n*.jsp text\n*.css text\n*.html text\n*.js text\n*.xml text\n*.sql text\n*.MF text\n*.tld text\n*.md text\n\n# git files\n*.gitignore text\n*.gitattributes text\n\n# eclipse files\n*.classpath text\n*.project text\n*.prefs text\n*.properties text\n*.component text\n" >> .gitattributes && echo "bin/" >> .gitignore && git add .

这实际上会尝试在gitattributes中执行这些行!更改\n \r\n将导致脚本崩溃,\\\n将成功运行脚本,尽管gitattributes仅包含

  

*

那我怎么用新线回应呢? Windows,mingwin,msysgit

编辑:我也试过单引号

编辑2014.03.13

jinit= !git init && `echo '* text=auto\n\n*.java text\n*.jsp text\n\
*.css text\n*.html text\n*.js text\n*.xml text\n*.sql text\n*.MF text\n\
*.tld text\n*.md text\n\n*.gitignore text\n*.gitattributes text\n\n\
*.classpath text\n*.project text\n*.prefs text\n*.properties text\n\
*.component text\n' >> .gitattributes` && `echo "bin/" >> .gitignore` 

EDIT 2014.03.14 :使用\来包装命令 - 仍然有效,但在* .css,* .tld,* .classpath和* .component之前引入了一个空格。

似乎无法管理回音评论。所以如果我添加\n# git files\n\*.gitignore text\n (...)它的EOFs - 为此做任何解决方法吗?

最后我使用了不同的方法(见评论):

jinit= !git init\
    && `ln /c/Dropbox/_/_git/java_eclipse.gitattributes .gitattributes`\
    && `echo "bin/" >> .gitignore`\
    && git add .

但我暂时保持开放状态,语法部分

2 个答案:

答案 0 :(得分:0)

它在Linux上运行良好。

为了避免遇到行结尾的问题,你可以让echo添加它:

echo "\* text=auto" >> .gitattributes
echo "\* .java text" >> .gitattributes
[...]

答案 1 :(得分:0)

有一条评论建议您只需将 .gitattributes 文件写入您的 git 模板目录。这是行不通的,因为在 documentation 中,它特别指出:

<块引用>

模板目录中名称不以点开头的文件和目录在创建后将被复制到$GIT_DIR中。

然而,我们实际上可以利用这一点!你说

<块引用>

我想为不同的语言使用不同的初始化别名(以及 gitignore/attrs)

这是一个公平的观点!但是,我仍然认为您当前的方法过于复杂。我建议使用 any 名称将文件添加到您的模板目录中,名称以点开头,以便您识别它。例如,您可以选择 .gitattributes-english.gitattributes-french

现在,运行以下命令:

git config --global alias.init-english "!git init;cp $(git config init.templatedir)/.gitattributes-english ./.gitattributes"

git config --global alias.init-french "!git init;cp $(git config init.templatedir)/.gitattributes-french ./.gitattributes"

现在,git init-english 将初始化一个存储库,并将 .gitattributes-english 的内容从您的模板目录复制到新存储库中的 .gitattributes,并且不会添加.gitattributes-french 到新存储库。 git init-french 将改为使用 .gitattributes-french 而不是 .gitattributes-english

我认为这还有一个额外的好处,即允许您编辑特定的 .gitattributes 文件而无需更新别名!

您显然不必使用 init.templatedir 我只是发现使用它最有意义,因为这些是模板。

最后请注意,这适用于 Windows!