【问题标题】:git alias for creating a .gitattributes on init - how do I add the new lines?用于在 init 上创建 .gitattributes 的 git 别名 - 如何添加新行?
【发布时间】:2014-01-14 06:48:16
【问题描述】:

我的最新迭代

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 之前引入了一个空格。 p>

似乎无法管理回显 cmets。因此,如果我添加 \n# git files\n\*.gitignore text\n (...) 它 EOF - 任何解决方法?

最后我使用了不同的方法(参见 cmets):

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

但我暂时把它打开,用于句法部分

【问题讨论】:

  • 为什么不把文件添加到git template directory,让所有新的git仓库默认都有这个文件?
  • @AD7six:谢谢提示!不知道 - 但我想为不同的语言设置不同的初始化别名(以及 gitignore/attrs) - 无论如何必须有办法。我还考虑过(硬)链接到文件而不是在脚本中硬连线配置,但我不相信我可以调用命令(加上它具有内部文件的路径等)。顺便说一句,脚本是一劳永逸的,而您必须在每台机器上编辑模板目录
  • @AD7six:比我最终做的模板目录链接到模板文件要好
  • 这听起来像是一个不成文的答案(3k 你仍然通过编辑问题来“回答”?!?)。
  • @AD7six:不——未解决的问题是如何在配置文件中包含 cmets jinit= `echo '* text=auto\n\n# comment`

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


【解决方案1】:

它在 Linux 上运行良好。

为避免出现行尾问题,您可以让 echo 添加它:

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

【讨论】:

  • 是的-虽然我在 Windows 上,但我想完成这项工作 - 连续多次调用 echo 应该可以,但是:1. 它会添加 LF 而不是 CRLF 我希望添加 printf 2.一定有办法,该死的:)
【解决方案2】:

有一条评论建议您只需将.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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2018-02-21
    • 2020-10-21
    • 2012-06-17
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多