Cargo项目中的哪些文件应该在我的.gitignore中?

时间:2017-04-27 20:17:20

标签: rust rust-cargo

我使用cargo new创建了一个“hello world”Rust应用。当我执行git status时,它显示了一堆文件:

A  rust/welcomec/Cargo.lock
A  rust/welcomec/Cargo.toml
A  rust/welcomec/src/main.rs
A  rust/welcomec/target/debug/.cargo-lock
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1.json
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/dep-bin-welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/deps/welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/welcome
A  rust/welcomec/target/debug/welcome.d

我可以安全地忽略这些文件和/或目录吗?

1 个答案:

答案 0 :(得分:5)

摘要

.gitignore用于库包

# Generated files
/target/

# The library shouldn't decide about the exact versions of 
# its dependencies, but let the downstream crate decide.
Cargo.lock

.gitignore表示可执行包装箱

# Generated files
/target/

详细

您需要在.gitignore中输入一两个条目,具体取决于您正在构建的箱子类型。无论crate类型如何,都可以完全忽略target/文件夹;它只包含生成的文件(例如编译工件)。

如果您正在编写可执行文件,则Cargo.lock文件应包含在存储库中,如果您正在编写库,则应忽略该文件。您可以阅读有关此in the FAQ的更多信息。引用最重要的部分:

  

Cargo.lock的目的是描述成功构建时的世界状况。 [...]

     

此属性最适合位于依赖关系链(二进制文件)末尾的应用程序和项目。因此,建议所有二进制文件检查Cargo.lock

     

对于图书馆来说,情况有所不同。 [...]如果一个库最终被多个依赖项传递使用,那么很可能只需要一个库的副本(基于semver兼容性)。如果所有图书馆都要检查他们的Cargo.lock,那么将使用该库的多个副本,甚至可能是版本冲突。

另请注意,cargo newcargo init 会自动在项目中生成.gitignore文件,除非参数--vcs none已通过。