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

问题描述 投票:0回答:2

我使用

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

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

rust rust-cargo
2个回答
43
投票

总结

.gitignore
用于可执行包

# Generated files
/target/

.gitignore
用于图书馆箱子

# Generated files
/target/

# Well, this depends... See below!
Cargo.lock

详情

您始终可以完全忽略

target/
文件夹。它仅包含生成的文件(例如编译工件),并且通常也很大。

如果您正在开发一个可执行程序,那么就已经完成了!只需一个条目。

对于图书馆项目,您可能还想忽略

Cargo.lock
。但这有点微妙。官方对此事的立场最近发生了变化
Cargo.lock
支持可重现的构建,因为它记录了所有依赖项的确切版本。这非常有用。对于可执行文件,您绝对需要那些可重复的构建,因此上面的建议。

重要的是要了解,如果项目使用您的库,您的

Cargo.lock
将被忽略! Cargo 只关心依赖关系的
Cargo.toml
。因此,
Cargo.lock
是否在您的存储库中基本上只与您的库开发相关。

  • 一方面,您应该始终使用所有依赖项的最新版本来测试您的库。这是反对

    Cargo.lock
    的论据。

  • 另一方面,

    Cargo.lock
    为您提供与其他项目相同的好处:可重复的构建意味着稳定的 CI,更容易平分,yada yada。

最终,你决定。但请放心:你不可能真的把事情搞砸。无论哪种方式通常都可以。


6
投票

您可以从 GitHub 的 gitignore for Rust 中获取一些灵感。在撰写本文时,文件如下:

# Generated by Cargo
# will have compiled files and executables
debug/
target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
© www.soinside.com 2019 - 2024. All rights reserved.